valtech-components 2.0.404 → 2.0.406
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/README.md +71 -0
- package/esm2022/lib/components/atoms/avatar/avatar.component.mjs +4 -4
- package/esm2022/lib/components/atoms/avatar/types.mjs +1 -1
- package/esm2022/lib/components/atoms/box/box.component.mjs +4 -4
- package/esm2022/lib/components/atoms/box/types.mjs +1 -1
- package/esm2022/lib/components/atoms/button/button.component.mjs +4 -4
- package/esm2022/lib/components/atoms/button/factory.mjs +1 -1
- package/esm2022/lib/components/atoms/countdown/countdown.component.mjs +343 -0
- package/esm2022/lib/components/atoms/countdown/types.mjs +27 -0
- package/esm2022/lib/components/atoms/display/display.component.mjs +4 -4
- package/esm2022/lib/components/atoms/display/types.mjs +1 -1
- package/esm2022/lib/components/atoms/divider/divider.component.mjs +4 -4
- package/esm2022/lib/components/atoms/divider/types.mjs +1 -1
- package/esm2022/lib/components/atoms/fab/fab.component.mjs +152 -0
- package/esm2022/lib/components/atoms/fab/types.mjs +2 -0
- package/esm2022/lib/components/atoms/href/href.component.mjs +4 -4
- package/esm2022/lib/components/atoms/href/types.mjs +1 -1
- package/esm2022/lib/components/atoms/icon/icon.component.mjs +4 -4
- package/esm2022/lib/components/atoms/icon/types.mjs +1 -1
- package/esm2022/lib/components/atoms/image/image.component.mjs +6 -6
- package/esm2022/lib/components/atoms/image/types.mjs +1 -1
- package/esm2022/lib/components/atoms/price-tag/price-tag.component.mjs +245 -0
- package/esm2022/lib/components/atoms/price-tag/types.mjs +15 -0
- package/esm2022/lib/components/atoms/progress-bar/progress-bar.component.mjs +4 -4
- package/esm2022/lib/components/atoms/progress-bar/types.mjs +1 -1
- package/esm2022/lib/components/atoms/progress-ring/progress-ring.component.mjs +149 -0
- package/esm2022/lib/components/atoms/progress-ring/types.mjs +2 -0
- package/esm2022/lib/components/atoms/qr-code/qr-code.component.mjs +417 -0
- package/esm2022/lib/components/atoms/qr-code/types.mjs +2 -0
- package/esm2022/lib/components/atoms/skeleton/skeleton.component.mjs +193 -0
- package/esm2022/lib/components/atoms/skeleton/types.mjs +13 -0
- package/esm2022/lib/components/atoms/text/text.component.mjs +4 -4
- package/esm2022/lib/components/atoms/text/types.mjs +1 -1
- package/esm2022/lib/components/atoms/title/title.component.mjs +4 -4
- package/esm2022/lib/components/atoms/title/types.mjs +1 -1
- package/esm2022/lib/components/molecules/accordion/accordion.component.mjs +139 -0
- package/esm2022/lib/components/molecules/accordion/types.mjs +2 -0
- package/esm2022/lib/components/molecules/action-header/action-header.component.mjs +4 -4
- package/esm2022/lib/components/molecules/action-header/types.mjs +1 -1
- package/esm2022/lib/components/molecules/alert-box/alert-box.component.mjs +4 -4
- package/esm2022/lib/components/molecules/alert-box/types.mjs +1 -1
- package/esm2022/lib/components/molecules/breadcrumb/breadcrumb.component.mjs +137 -0
- package/esm2022/lib/components/molecules/breadcrumb/types.mjs +2 -0
- package/esm2022/lib/components/molecules/button-group/button-group.component.mjs +4 -4
- package/esm2022/lib/components/molecules/button-group/types.mjs +1 -1
- package/esm2022/lib/components/molecules/card/card.component.mjs +5 -5
- package/esm2022/lib/components/molecules/card/types.mjs +1 -1
- package/esm2022/lib/components/molecules/check-input/check-input.component.mjs +4 -4
- package/esm2022/lib/components/molecules/chip-group/chip-group.component.mjs +174 -0
- package/esm2022/lib/components/molecules/chip-group/types.mjs +2 -0
- package/esm2022/lib/components/molecules/code-display/code-display.component.mjs +4 -4
- package/esm2022/lib/components/molecules/code-display/types.mjs +1 -1
- package/esm2022/lib/components/molecules/command-display/command-display.component.mjs +4 -4
- package/esm2022/lib/components/molecules/command-display/types.mjs +1 -1
- package/esm2022/lib/components/molecules/comment/comment.component.mjs +634 -0
- package/esm2022/lib/components/molecules/comment/types.mjs +2 -0
- package/esm2022/lib/components/molecules/comment-input/comment-input.component.mjs +4 -4
- package/esm2022/lib/components/molecules/content-loader/content-loader.component.mjs +4 -4
- package/esm2022/lib/components/molecules/content-loader/types.mjs +1 -1
- package/esm2022/lib/components/molecules/currency-input/currency-input.component.mjs +368 -0
- package/esm2022/lib/components/molecules/currency-input/types.mjs +18 -0
- package/esm2022/lib/components/molecules/date-input/date-input.component.mjs +5 -5
- package/esm2022/lib/components/molecules/date-range-input/date-range-input.component.mjs +418 -0
- package/esm2022/lib/components/molecules/date-range-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/email-input/email-input.component.mjs +4 -4
- package/esm2022/lib/components/molecules/expandable-text/expandable-text.component.mjs +4 -4
- package/esm2022/lib/components/molecules/expandable-text/types.mjs +1 -1
- package/esm2022/lib/components/molecules/file-input/file-input.component.mjs +4 -4
- package/esm2022/lib/components/molecules/glow-card/glow-card.component.mjs +279 -0
- package/esm2022/lib/components/molecules/glow-card/types.mjs +11 -0
- package/esm2022/lib/components/molecules/hint/hint.component.mjs +4 -4
- package/esm2022/lib/components/molecules/hour-input/hour-input.component.mjs +4 -4
- package/esm2022/lib/components/molecules/info/info.component.mjs +4 -4
- package/esm2022/lib/components/molecules/info/types.mjs +1 -1
- package/esm2022/lib/components/molecules/language-selector/language-selector.component.mjs +4 -4
- package/esm2022/lib/components/molecules/language-selector/types.mjs +1 -1
- package/esm2022/lib/components/molecules/layered-card/layered-card.component.mjs +4 -4
- package/esm2022/lib/components/molecules/layered-card/types.mjs +1 -1
- package/esm2022/lib/components/molecules/link/link.component.mjs +4 -4
- package/esm2022/lib/components/molecules/link/types.mjs +1 -1
- package/esm2022/lib/components/molecules/links-cake/links-cake.component.mjs +4 -4
- package/esm2022/lib/components/molecules/links-cake/types.mjs +1 -1
- package/esm2022/lib/components/molecules/multi-select-search/multi-select-search.component.mjs +5 -5
- package/esm2022/lib/components/molecules/notes-box/notes-box.component.mjs +4 -4
- package/esm2022/lib/components/molecules/notes-box/types.mjs +1 -1
- package/esm2022/lib/components/molecules/number-from-to/number-from-to.component.mjs +4 -4
- package/esm2022/lib/components/molecules/number-input/number-input.component.mjs +4 -4
- package/esm2022/lib/components/molecules/number-stepper/number-stepper.component.mjs +377 -0
- package/esm2022/lib/components/molecules/number-stepper/types.mjs +2 -0
- package/esm2022/lib/components/molecules/pagination/pagination.component.mjs +253 -0
- package/esm2022/lib/components/molecules/pagination/types.mjs +2 -0
- package/esm2022/lib/components/molecules/participant-card/participant-card.component.mjs +486 -0
- package/esm2022/lib/components/molecules/participant-card/types.mjs +21 -0
- package/esm2022/lib/components/molecules/password-input/password-input.component.mjs +4 -4
- package/esm2022/lib/components/molecules/phone-input/phone-input.component.mjs +336 -0
- package/esm2022/lib/components/molecules/phone-input/types.mjs +19 -0
- package/esm2022/lib/components/molecules/pill/pill.component.mjs +4 -4
- package/esm2022/lib/components/molecules/pill/types.mjs +1 -1
- package/esm2022/lib/components/molecules/pin-input/pin-input.component.mjs +4 -4
- package/esm2022/lib/components/molecules/plain-code-box/plain-code-box.component.mjs +4 -4
- package/esm2022/lib/components/molecules/plain-code-box/types.mjs +1 -1
- package/esm2022/lib/components/molecules/popover-selector/popover-selector.component.mjs +5 -5
- package/esm2022/lib/components/molecules/popover-selector/types.mjs +1 -1
- package/esm2022/lib/components/molecules/progress-status/progress-status.component.mjs +4 -4
- package/esm2022/lib/components/molecules/progress-status/types.mjs +1 -1
- package/esm2022/lib/components/molecules/prompter/prompter.component.mjs +4 -4
- package/esm2022/lib/components/molecules/prompter/types.mjs +1 -1
- package/esm2022/lib/components/molecules/quote-box/quote-box.component.mjs +155 -0
- package/esm2022/lib/components/molecules/radio-input/radio-input.component.mjs +5 -5
- package/esm2022/lib/components/molecules/raffle-status-card/raffle-status-card.component.mjs +484 -0
- package/esm2022/lib/components/molecules/raffle-status-card/types.mjs +23 -0
- package/esm2022/lib/components/molecules/range-input/range-input.component.mjs +148 -0
- package/esm2022/lib/components/molecules/range-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/rating/rating.component.mjs +149 -0
- package/esm2022/lib/components/molecules/rating/types.mjs +2 -0
- package/esm2022/lib/components/molecules/searchbar/searchbar.component.mjs +4 -4
- package/esm2022/lib/components/molecules/segment-control/segment-control.component.mjs +145 -0
- package/esm2022/lib/components/molecules/segment-control/types.mjs +2 -0
- package/esm2022/lib/components/molecules/select-input/select-input.component.mjs +5 -5
- package/esm2022/lib/components/molecules/select-search/select-search.component.mjs +5 -5
- package/esm2022/lib/components/molecules/share-buttons/share-buttons.component.mjs +277 -0
- package/esm2022/lib/components/molecules/share-buttons/types.mjs +88 -0
- package/esm2022/lib/components/molecules/stats-card/stats-card.component.mjs +165 -0
- package/esm2022/lib/components/molecules/stats-card/types.mjs +2 -0
- package/esm2022/lib/components/molecules/stepper/stepper.component.mjs +239 -0
- package/esm2022/lib/components/molecules/stepper/types.mjs +2 -0
- package/esm2022/lib/components/molecules/tabs/tabs.component.mjs +135 -0
- package/esm2022/lib/components/molecules/tabs/types.mjs +2 -0
- package/esm2022/lib/components/molecules/text-input/text-input.component.mjs +4 -4
- package/esm2022/lib/components/molecules/textarea-input/textarea-input.component.mjs +204 -0
- package/esm2022/lib/components/molecules/textarea-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/ticket-grid/ticket-grid.component.mjs +497 -0
- package/esm2022/lib/components/molecules/ticket-grid/types.mjs +11 -0
- package/esm2022/lib/components/molecules/timeline/timeline.component.mjs +140 -0
- package/esm2022/lib/components/molecules/timeline/types.mjs +2 -0
- package/esm2022/lib/components/molecules/title-block/title-block.component.mjs +4 -4
- package/esm2022/lib/components/molecules/title-block/types.mjs +1 -1
- package/esm2022/lib/components/molecules/toggle-input/toggle-input.component.mjs +89 -0
- package/esm2022/lib/components/molecules/toggle-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/winner-display/types.mjs +9 -0
- package/esm2022/lib/components/molecules/winner-display/winner-display.component.mjs +370 -0
- package/esm2022/lib/components/organisms/article/article.component.mjs +4 -4
- package/esm2022/lib/components/organisms/article/types.mjs +1 -1
- package/esm2022/lib/components/organisms/banner/banner.component.mjs +4 -4
- package/esm2022/lib/components/organisms/banner/types.mjs +1 -1
- package/esm2022/lib/components/organisms/comment-section/comment-section.component.mjs +578 -0
- package/esm2022/lib/components/organisms/comment-section/types.mjs +2 -0
- package/esm2022/lib/components/organisms/data-table/data-table.component.mjs +853 -0
- package/esm2022/lib/components/organisms/data-table/types.mjs +13 -0
- package/esm2022/lib/components/organisms/footer/footer.component.mjs +4 -4
- package/esm2022/lib/components/organisms/footer/types.mjs +1 -1
- package/esm2022/lib/components/organisms/form/factory.mjs +1 -1
- package/esm2022/lib/components/organisms/form/form-footer/form-footer.component.mjs +4 -4
- package/esm2022/lib/components/organisms/form/form.component.mjs +4 -4
- package/esm2022/lib/components/organisms/header/header.component.mjs +4 -4
- package/esm2022/lib/components/organisms/header/types.mjs +1 -1
- package/esm2022/lib/components/organisms/item-list/item-list.component.mjs +4 -4
- package/esm2022/lib/components/organisms/item-list/types.mjs +1 -1
- package/esm2022/lib/components/organisms/no-content/no-content.component.mjs +4 -4
- package/esm2022/lib/components/organisms/no-content/types.mjs +1 -1
- package/esm2022/lib/components/organisms/toolbar/toolbar.component.mjs +4 -4
- package/esm2022/lib/components/organisms/toolbar/types.mjs +1 -1
- package/esm2022/lib/components/organisms/wizard/types.mjs +1 -1
- package/esm2022/lib/components/organisms/wizard/wizard-footer/wizard-footer.component.mjs +4 -4
- package/esm2022/lib/components/organisms/wizard/wizard.component.mjs +4 -4
- package/esm2022/lib/components/templates/layout/layout.component.mjs +4 -4
- package/esm2022/lib/components/templates/simple/simple.component.mjs +5 -5
- package/esm2022/lib/components/templates/simple/types.mjs +1 -1
- package/esm2022/lib/components/types.mjs +22 -16
- package/esm2022/lib/services/confirmation-dialog/confirmation-dialog.service.mjs +180 -0
- package/esm2022/lib/services/confirmation-dialog/types.mjs +14 -0
- package/esm2022/lib/services/download.service.mjs +4 -4
- package/esm2022/lib/services/icons.service.mjs +4 -4
- package/esm2022/lib/services/in-app-browser.service.mjs +4 -4
- package/esm2022/lib/services/lang-provider/components/lang-settings.mjs +1 -1
- package/esm2022/lib/services/lang-provider/content.mjs +1 -1
- package/esm2022/lib/services/lang-provider/lang-provider.service.mjs +4 -4
- package/esm2022/lib/services/lang-provider/types.mjs +1 -1
- package/esm2022/lib/services/link-processor.service.mjs +4 -4
- package/esm2022/lib/services/local-storage.service.mjs +1 -1
- package/esm2022/lib/services/modal/modal.service.mjs +213 -0
- package/esm2022/lib/services/modal/simple-modal-content.component.mjs +133 -0
- package/esm2022/lib/services/modal/types.mjs +26 -0
- package/esm2022/lib/services/navigation.service.mjs +4 -4
- package/esm2022/lib/services/qr-generator/qr-generator.service.mjs +341 -0
- package/esm2022/lib/services/qr-generator/types.mjs +46 -0
- package/esm2022/lib/services/theme.service.mjs +4 -4
- package/esm2022/lib/services/toast.service.mjs +4 -4
- package/esm2022/lib/services/types.mjs +1 -1
- package/esm2022/lib/shared/constants/storage.mjs +1 -1
- package/esm2022/lib/shared/pipes/process-links.pipe.mjs +4 -4
- package/esm2022/lib/shared/utils/content.mjs +1 -1
- package/esm2022/lib/shared/utils/dom.mjs +1 -1
- package/esm2022/lib/shared/utils/form-defaults.mjs +1 -1
- package/esm2022/lib/shared/utils/simple-content.mjs +1 -1
- package/esm2022/lib/shared/utils/styles.mjs +1 -1
- package/esm2022/lib/shared/utils/text.mjs +1 -1
- package/esm2022/public-api.mjs +73 -3
- package/esm2022/valtech-components.mjs +1 -1
- package/fesm2022/valtech-components-simple-modal-content.component-DQhEgUmS.mjs +136 -0
- package/fesm2022/valtech-components-simple-modal-content.component-DQhEgUmS.mjs.map +1 -0
- package/fesm2022/valtech-components.mjs +14847 -4292
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/countdown/countdown.component.d.ts +38 -0
- package/lib/components/atoms/countdown/types.d.ts +108 -0
- package/lib/components/atoms/fab/fab.component.d.ts +16 -0
- package/lib/components/atoms/fab/types.d.ts +45 -0
- package/lib/components/atoms/price-tag/price-tag.component.d.ts +16 -0
- package/lib/components/atoms/price-tag/types.d.ts +59 -0
- package/lib/components/atoms/progress-ring/progress-ring.component.d.ts +20 -0
- package/lib/components/atoms/progress-ring/types.d.ts +24 -0
- package/lib/components/atoms/qr-code/qr-code.component.d.ts +36 -0
- package/lib/components/atoms/qr-code/types.d.ts +124 -0
- package/lib/components/atoms/skeleton/skeleton.component.d.ts +12 -0
- package/lib/components/atoms/skeleton/types.d.ts +29 -0
- package/lib/components/molecules/accordion/accordion.component.d.ts +19 -0
- package/lib/components/molecules/accordion/types.d.ts +47 -0
- package/lib/components/molecules/breadcrumb/breadcrumb.component.d.ts +22 -0
- package/lib/components/molecules/breadcrumb/types.d.ts +45 -0
- package/lib/components/molecules/chip-group/chip-group.component.d.ts +22 -0
- package/lib/components/molecules/chip-group/types.d.ts +65 -0
- package/lib/components/molecules/comment/comment.component.d.ts +42 -0
- package/lib/components/molecules/comment/types.d.ts +171 -0
- package/lib/components/molecules/currency-input/currency-input.component.d.ts +43 -0
- package/lib/components/molecules/currency-input/types.d.ts +96 -0
- package/lib/components/molecules/date-range-input/date-range-input.component.d.ts +42 -0
- package/lib/components/molecules/date-range-input/types.d.ts +109 -0
- package/lib/components/molecules/glow-card/glow-card.component.d.ts +51 -0
- package/lib/components/molecules/glow-card/types.d.ts +92 -0
- package/lib/components/molecules/number-stepper/number-stepper.component.d.ts +34 -0
- package/lib/components/molecules/number-stepper/types.d.ts +88 -0
- package/lib/components/molecules/pagination/pagination.component.d.ts +15 -0
- package/lib/components/molecules/pagination/types.d.ts +41 -0
- package/lib/components/molecules/participant-card/participant-card.component.d.ts +26 -0
- package/lib/components/molecules/participant-card/types.d.ts +132 -0
- package/lib/components/molecules/phone-input/phone-input.component.d.ts +38 -0
- package/lib/components/molecules/phone-input/types.d.ts +98 -0
- package/lib/components/molecules/quote-box/quote-box.component.d.ts +26 -0
- package/lib/components/molecules/raffle-status-card/raffle-status-card.component.d.ts +22 -0
- package/lib/components/molecules/raffle-status-card/types.d.ts +108 -0
- package/lib/components/molecules/range-input/range-input.component.d.ts +30 -0
- package/lib/components/molecules/range-input/types.d.ts +59 -0
- package/lib/components/molecules/rating/rating.component.d.ts +17 -0
- package/lib/components/molecules/rating/types.d.ts +41 -0
- package/lib/components/molecules/segment-control/segment-control.component.d.ts +30 -0
- package/lib/components/molecules/segment-control/types.d.ts +46 -0
- package/lib/components/molecules/share-buttons/share-buttons.component.d.ts +22 -0
- package/lib/components/molecules/share-buttons/types.d.ts +108 -0
- package/lib/components/molecules/stats-card/stats-card.component.d.ts +14 -0
- package/lib/components/molecules/stats-card/types.d.ts +41 -0
- package/lib/components/molecules/stepper/stepper.component.d.ts +21 -0
- package/lib/components/molecules/stepper/types.d.ts +66 -0
- package/lib/components/molecules/tabs/tabs.component.d.ts +17 -0
- package/lib/components/molecules/tabs/types.d.ts +45 -0
- package/lib/components/molecules/textarea-input/textarea-input.component.d.ts +27 -0
- package/lib/components/molecules/textarea-input/types.d.ts +74 -0
- package/lib/components/molecules/ticket-grid/ticket-grid.component.d.ts +41 -0
- package/lib/components/molecules/ticket-grid/types.d.ts +122 -0
- package/lib/components/molecules/timeline/timeline.component.d.ts +14 -0
- package/lib/components/molecules/timeline/types.d.ts +39 -0
- package/lib/components/molecules/toggle-input/toggle-input.component.d.ts +24 -0
- package/lib/components/molecules/toggle-input/types.d.ts +30 -0
- package/lib/components/molecules/winner-display/types.d.ts +103 -0
- package/lib/components/molecules/winner-display/winner-display.component.d.ts +37 -0
- package/lib/components/organisms/article/article.component.d.ts +1 -1
- package/lib/components/organisms/comment-section/comment-section.component.d.ts +52 -0
- package/lib/components/organisms/comment-section/types.d.ts +144 -0
- package/lib/components/organisms/data-table/data-table.component.d.ts +46 -0
- package/lib/components/organisms/data-table/types.d.ts +205 -0
- package/lib/components/types.d.ts +21 -15
- package/lib/services/confirmation-dialog/confirmation-dialog.service.d.ts +71 -0
- package/lib/services/confirmation-dialog/types.d.ts +61 -0
- package/lib/services/modal/modal.service.d.ts +98 -0
- package/lib/services/modal/simple-modal-content.component.d.ts +19 -0
- package/lib/services/modal/types.d.ts +155 -0
- package/lib/services/qr-generator/qr-generator.service.d.ts +115 -0
- package/lib/services/qr-generator/types.d.ts +141 -0
- package/package.json +9 -2
- package/public-api.d.ts +72 -2
- package/LICENSE +0 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valtech-components.mjs","sources":["../../../projects/valtech-components/src/lib/components/atoms/avatar/avatar.component.ts","../../../projects/valtech-components/src/lib/services/icons.service.ts","../../../projects/valtech-components/src/lib/components/atoms/box/box.component.ts","../../../projects/valtech-components/src/lib/shared/utils/simple-content.ts","../../../projects/valtech-components/src/lib/components/types.ts","../../../projects/valtech-components/src/lib/services/download.service.ts","../../../projects/valtech-components/src/lib/services/in-app-browser.service.ts","../../../projects/valtech-components/src/lib/services/navigation.service.ts","../../../projects/valtech-components/src/lib/shared/constants/storage.ts","../../../projects/valtech-components/src/lib/services/local-storage.service.ts","../../../projects/valtech-components/src/lib/services/types.ts","../../../projects/valtech-components/src/lib/services/lang-provider/types.ts","../../../projects/valtech-components/src/lib/services/lang-provider/lang-provider.service.ts","../../../projects/valtech-components/src/lib/components/atoms/button/button.component.ts","../../../projects/valtech-components/src/lib/components/atoms/button/factory.ts","../../../projects/valtech-components/src/lib/components/atoms/display/display.component.ts","../../../projects/valtech-components/src/lib/components/atoms/divider/divider.component.ts","../../../projects/valtech-components/src/lib/components/atoms/href/href.component.ts","../../../projects/valtech-components/src/lib/components/atoms/icon/icon.component.ts","../../../projects/valtech-components/src/lib/components/atoms/image/image.component.ts","../../../projects/valtech-components/src/lib/components/atoms/progress-bar/progress-bar.component.ts","../../../projects/valtech-components/src/lib/services/link-processor.service.ts","../../../projects/valtech-components/src/lib/shared/pipes/process-links.pipe.ts","../../../projects/valtech-components/src/lib/components/atoms/text/text.component.ts","../../../projects/valtech-components/src/lib/components/atoms/title/title.component.ts","../../../projects/valtech-components/src/lib/components/atoms/title/types.ts","../../../projects/valtech-components/src/lib/components/molecules/alert-box/alert-box.component.ts","../../../projects/valtech-components/src/lib/components/molecules/button-group/button-group.component.ts","../../../projects/valtech-components/src/lib/components/molecules/card/types.ts","../../../projects/valtech-components/src/lib/components/molecules/card/card.component.ts","../../../projects/valtech-components/src/lib/components/molecules/check-input/check-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/comment-input/comment-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/content-loader/content-loader.component.ts","../../../projects/valtech-components/src/lib/shared/utils/form-defaults.ts","../../../projects/valtech-components/src/lib/components/molecules/date-input/date-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/email-input/email-input.component.ts","../../../projects/valtech-components/src/lib/shared/utils/styles.ts","../../../projects/valtech-components/src/lib/components/molecules/expandable-text/expandable-text.component.ts","../../../projects/valtech-components/src/lib/components/molecules/file-input/file-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/hint/hint.component.ts","../../../projects/valtech-components/src/lib/components/molecules/hour-input/hour-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/popover-selector/popover-selector.component.ts","../../../projects/valtech-components/src/lib/components/molecules/language-selector/language-selector.component.ts","../../../projects/valtech-components/src/lib/services/theme.service.ts","../../../projects/valtech-components/src/lib/components/molecules/title-block/title-block.component.ts","../../../projects/valtech-components/src/lib/components/molecules/layered-card/layered-card.component.ts","../../../projects/valtech-components/src/lib/components/molecules/link/link.component.ts","../../../projects/valtech-components/src/lib/components/molecules/links-cake/links-cake.component.ts","../../../projects/valtech-components/src/lib/components/molecules/notes-box/notes-box.component.ts","../../../projects/valtech-components/src/lib/components/molecules/number-input/number-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/number-from-to/number-from-to.component.ts","../../../projects/valtech-components/src/lib/components/molecules/password-input/password-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/pin-input/pin-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/progress-status/progress-status.component.ts","../../../projects/valtech-components/src/lib/components/molecules/prompter/prompter.component.ts","../../../projects/valtech-components/src/lib/components/molecules/radio-input/radio-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/searchbar/searchbar.component.ts","../../../projects/valtech-components/src/lib/components/molecules/select-input/select-input.component.ts","../../../projects/valtech-components/src/lib/shared/utils/text.ts","../../../projects/valtech-components/src/lib/components/molecules/select-search/select-search.component.ts","../../../projects/valtech-components/src/lib/components/molecules/text-input/text-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/code-display/code-display.component.ts","../../../projects/valtech-components/src/lib/components/molecules/action-header/action-header.component.ts","../../../projects/valtech-components/src/lib/components/molecules/pill/pill.component.ts","../../../projects/valtech-components/src/lib/components/molecules/command-display/command-display.component.ts","../../../projects/valtech-components/src/lib/components/molecules/info/info.component.ts","../../../projects/valtech-components/src/lib/components/molecules/plain-code-box/plain-code-box.component.ts","../../../projects/valtech-components/src/lib/components/organisms/article/article.component.ts","../../../projects/valtech-components/src/lib/components/organisms/article/types.ts","../../../projects/valtech-components/src/lib/components/organisms/banner/banner.component.ts","../../../projects/valtech-components/src/lib/components/organisms/toolbar/toolbar.component.ts","../../../projects/valtech-components/src/lib/components/organisms/footer/footer.component.ts","../../../projects/valtech-components/src/lib/components/organisms/form/factory.ts","../../../projects/valtech-components/src/lib/components/organisms/form/form-footer/form-footer.component.ts","../../../projects/valtech-components/src/lib/shared/utils/dom.ts","../../../projects/valtech-components/src/lib/components/molecules/multi-select-search/multi-select-search.component.ts","../../../projects/valtech-components/src/lib/components/organisms/form/form.component.ts","../../../projects/valtech-components/src/lib/components/organisms/header/header.component.ts","../../../projects/valtech-components/src/lib/components/organisms/item-list/item-list.component.ts","../../../projects/valtech-components/src/lib/components/organisms/no-content/no-content.component.ts","../../../projects/valtech-components/src/lib/components/organisms/wizard/types.ts","../../../projects/valtech-components/src/lib/components/organisms/wizard/wizard-footer/wizard-footer.component.ts","../../../projects/valtech-components/src/lib/components/organisms/wizard/wizard.component.ts","../../../projects/valtech-components/src/lib/components/templates/layout/layout.component.ts","../../../projects/valtech-components/src/lib/components/templates/simple/simple.component.ts","../../../projects/valtech-components/src/lib/services/lang-provider/components/lang-settings.ts","../../../projects/valtech-components/src/lib/services/lang-provider/content.ts","../../../projects/valtech-components/src/lib/services/toast.service.ts","../../../projects/valtech-components/src/lib/shared/utils/content.ts","../../../projects/valtech-components/src/public-api.ts","../../../projects/valtech-components/src/valtech-components.ts"],"sourcesContent":["import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IonAvatar } from '@ionic/angular/standalone';\nimport { AvatarMetadata } from './types';\n\n@Component({\n selector: 'val-avatar',\n standalone: true,\n imports: [IonAvatar],\n template: `\n <ion-avatar\n aria-hidden=\"true\"\n [class]=\"props.size\"\n [class.box]=\"props.box\"\n [class.grayscale]=\"props.grayscale\"\n (click)=\"onClickHandler()\"\n >\n <img alt=\"profile image\" [src]=\"props.image || props.default\" />\n </ion-avatar>\n `,\n styleUrls: ['./avatar.component.scss'],\n})\n/**\n * val-avatar\n *\n * Displays a user or profile image, optionally with a box style and different sizes.\n *\n * @example\n * <val-avatar [props]=\"{ image: 'url', size: 'medium', box: true }\" (onClick)=\"handler()\"></val-avatar>\n *\n * @input props: AvatarMetadata - Configuration for the avatar (image, size, box, default image)\n * @output onClick - Emits when the avatar is clicked\n */\nexport class AvatarComponent implements OnInit {\n @Input() props: AvatarMetadata;\n\n /**\n * Event emitted when the avatar is clicked.\n */\n @Output()\n onClick = new EventEmitter();\n\n constructor() {}\n\n ngOnInit() {}\n\n onClickHandler() {\n this.onClick.emit();\n }\n}\n","/* eslint-disable no-underscore-dangle */\n\n/**\n * Service for registering and managing custom Ionicons icons in the application.\n * Automatically registers a set of commonly used icons on initialization.\n */\n\nimport { Injectable } from '@angular/core';\nimport { addIcons } from 'ionicons';\nimport {\n addCircleOutline,\n addOutline,\n alertCircleOutline,\n alertOutline,\n arrowBackOutline,\n arrowDownOutline,\n arrowForwardOutline,\n businessOutline,\n calendarOutline,\n chatbubblesOutline,\n checkmarkCircleOutline,\n checkmarkOutline,\n chevronDownOutline,\n chevronForwardOutline,\n clipboardOutline,\n closeOutline,\n copyOutline,\n createOutline,\n documentTextOutline,\n ellipsisHorizontalOutline,\n eyeOffOutline,\n eyeOutline,\n filterOutline,\n heart,\n heartOutline,\n homeOutline,\n informationCircleOutline,\n locationOutline,\n lockClosedOutline,\n logoFacebook,\n logoInstagram,\n logoLinkedin,\n logoNpm,\n logoTiktok,\n logoTwitter,\n logoYoutube,\n notificationsOutline,\n openOutline,\n playOutline,\n refreshOutline,\n removeOutline,\n scanOutline,\n shareOutline,\n trashOutline,\n} from 'ionicons/icons';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class IconService {\n /**\n * Registers a set of Ionicons icons for use throughout the app.\n */\n constructor() {\n addIcons({\n addOutline,\n addCircleOutline,\n alertOutline,\n alertCircleOutline,\n arrowBackOutline,\n arrowForwardOutline,\n arrowDownOutline,\n checkmarkCircleOutline,\n ellipsisHorizontalOutline,\n notificationsOutline,\n openOutline,\n closeOutline,\n chatbubblesOutline,\n shareOutline,\n heart,\n heartOutline,\n homeOutline,\n eyeOffOutline,\n eyeOutline,\n scanOutline,\n chevronDownOutline,\n chevronForwardOutline,\n checkmarkOutline,\n clipboardOutline,\n copyOutline,\n filterOutline,\n locationOutline,\n calendarOutline,\n businessOutline,\n logoTwitter,\n logoInstagram,\n logoLinkedin,\n logoYoutube,\n logoTiktok,\n logoFacebook,\n createOutline,\n trashOutline,\n playOutline,\n refreshOutline,\n documentTextOutline,\n lockClosedOutline,\n informationCircleOutline,\n logoNpm,\n removeOutline,\n });\n }\n}\n","import { CommonModule, NgStyle } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IonCard, IonIcon } from '@ionic/angular/standalone';\nimport { IconService } from '../../../services/icons.service';\nimport { BoxMetadata } from './types';\n\n@Component({\n selector: 'val-box',\n standalone: true,\n imports: [CommonModule, IonCard, IonIcon, NgStyle],\n template: `\n <ion-card\n class=\"box\"\n [color]=\"props.color\"\n [class.rounded]=\"props.rounded\"\n [class.bordered]=\"props.bordered\"\n [class.transparent]=\"!props.color\"\n [class.left-border]=\"props.leftBorder\"\n [ngStyle]=\"{\n padding: props.padding ? props.padding : '0px',\n }\"\n >\n @if (props.icon) {\n <ion-icon class=\"icon\" [name]=\"props.icon\" (click)=\"clickHandler()\"></ion-icon>\n }\n <div\n [ngStyle]=\"{\n 'margin-right': props.icon ? '24px' : '0px',\n }\"\n >\n <ng-content select=\"[body]\"></ng-content>\n </div>\n </ion-card>\n `,\n styleUrls: ['./box.component.scss'],\n})\n/**\n * val-box\n *\n * A stylized card container for grouping content, with optional icon, color, border, and click event.\n *\n * @example\n * <val-box [props]=\"{ color: 'primary', rounded: true, icon: 'star' }\" (onClick)=\"handler()\">\n * <div body>Content here</div>\n * </val-box>\n *\n * @input props: BoxMetadata - Configuration for the box (color, icon, border, etc.)\n * @output onClick - Emits when the box or its icon is clicked\n */\nexport class BoxComponent implements OnInit {\n /**\n * Box configuration object.\n * @type {BoxMetadata}\n * @property color - The color of the box (Ionic color string).\n * @property icon - The name of the icon to display (optional).\n * @property bordered - Whether the box has a border (optional).\n * @property leftBorder - Whether the box has a left border (optional).\n * @property rounded - Whether the box has rounded corners (optional).\n * @property padding - Custom padding for the box (optional).\n */\n @Input()\n props: BoxMetadata;\n\n /**\n * Event emitted when the box or its icon is clicked.\n */\n @Output()\n onClick = new EventEmitter();\n\n constructor(icon: IconService) {}\n\n ngOnInit() {}\n\n clickHandler() {\n this.onClick.emit();\n }\n}\n","/**\n * Simplified content utilities for the new LangService-only system.\n * This replaces the old reactive-content.ts with a much simpler approach.\n */\n\n/**\n * Base metadata for components that support reactive content.\n * Simplified version that works directly with LangService.\n */\nexport interface ReactiveContentMetadata {\n /** Static content text (takes precedence over reactive content) */\n content?: string;\n /** Content key for reactive content from LangService */\n contentKey?: string;\n /** Component class name for content lookup */\n contentClass?: string;\n /** Fallback text if content is not found */\n contentFallback?: string;\n}\n\n/**\n * Extended metadata for text-based components with reactive content support.\n */\nexport interface ReactiveTextMetadata extends ReactiveContentMetadata {\n /** Static content text */\n content?: string;\n /** Content key for reactive lookup */\n contentKey?: string;\n /** Component class name */\n contentClass?: string;\n /** Fallback text */\n contentFallback?: string;\n}\n\n/**\n * Extended metadata for components that support content interpolation.\n */\nexport interface ReactiveContentWithInterpolation extends ReactiveContentMetadata {\n /** Interpolation data for parameterized content */\n contentInterpolation?: Record<string, string | number>;\n}\n\n/**\n * Helper function to determine if component should use reactive content.\n * @param metadata Component metadata\n * @returns True if component should use reactive content\n */\nexport function shouldUseReactiveContent(metadata: ReactiveContentMetadata): boolean {\n return !metadata.content && !!(metadata.contentKey && metadata.contentClass);\n}\n\n/**\n * Extract content configuration from metadata.\n * @param metadata Component metadata\n * @returns Content configuration for LangService\n */\nexport function extractContentConfig(metadata: ReactiveContentMetadata) {\n return {\n className: metadata.contentClass || '',\n key: metadata.contentKey || '',\n fallback: metadata.contentFallback,\n };\n}\n\n/**\n * Create reactive content metadata with defaults.\n * @param config Partial content configuration\n * @returns Complete reactive content metadata\n */\nexport function createReactiveContentMetadata(\n config: Partial<ReactiveContentMetadata>\n): ReactiveContentMetadata {\n return {\n content: config.content,\n contentKey: config.contentKey,\n contentClass: config.contentClass,\n contentFallback: config.contentFallback,\n };\n}\n\n/**\n * Interpolate content string with values.\n * Replaces placeholders like {{key}} or {key} with actual values.\n *\n * @param content - Content string with placeholders\n * @param values - Values to interpolate\n * @returns Interpolated string\n *\n * @example\n * ```typescript\n * interpolateContent('Hello {{name}}!', { name: 'World' })\n * // Returns: 'Hello World!'\n * ```\n */\nexport function interpolateContent(\n content: string,\n values?: Record<string, string | number>\n): string {\n if (!values || !content) {\n return content;\n }\n\n return content.replace(/\\{\\{?(\\w+)\\}?\\}/g, (match, key) => {\n const value = values[key];\n return value !== undefined ? String(value) : match;\n });\n}\n\n/**\n * Check if component should use reactive content with interpolation.\n * @param metadata Component metadata with interpolation\n * @returns True if component should use reactive content with interpolation\n */\nexport function shouldUseReactiveContentWithInterpolation(\n metadata: ReactiveContentWithInterpolation\n): boolean {\n return shouldUseReactiveContent(metadata) && !!metadata.contentInterpolation;\n}\n\n/**\n * Extract content configuration with interpolation from metadata.\n * @param metadata Component metadata with interpolation\n * @returns Content configuration for LangService with interpolation data\n */\nexport function extractContentConfigWithInterpolation(metadata: ReactiveContentWithInterpolation) {\n return {\n className: metadata.contentClass || '',\n key: metadata.contentKey || '',\n fallback: metadata.contentFallback,\n interpolation: metadata.contentInterpolation,\n };\n}\n\n/**\n * Helper function to get reactive content with interpolation using LangService.\n * This provides a unified way to get reactive, interpolated content.\n *\n * @param langService - The LangService instance\n * @param metadata - Component metadata with interpolation\n * @returns Observable that emits interpolated content\n *\n * @example\n * ```typescript\n * const content$ = fromContentWithInterpolation(this.langService, {\n * contentClass: 'MyComponent',\n * contentKey: 'greeting',\n * contentInterpolation: { name: 'World' }\n * });\n * ```\n */\nexport function fromContentWithInterpolation(\n langService: any, // LangService type would cause circular dependency\n metadata: ReactiveContentWithInterpolation\n): any {\n // Observable<string> but avoiding import\n const config = extractContentConfigWithInterpolation(metadata);\n\n if (!config.className || !config.key) {\n throw new Error('fromContentWithInterpolation requires both contentClass and contentKey');\n }\n\n return langService.getContentWithInterpolation(\n config.className,\n config.key,\n config.interpolation,\n config.fallback\n );\n}\n\n/**\n * Helper function to get static content with interpolation.\n * This provides interpolation for static content strings.\n *\n * @param content - Static content string\n * @param interpolationData - Values to interpolate\n * @returns Interpolated string\n */\nexport function interpolateStaticContent(\n content: string,\n interpolationData?: Record<string, string | number>\n): string {\n return interpolateContent(content, interpolationData);\n}\n","import { FormControl, ValidatorFn } from '@angular/forms';\nimport { Color } from '@ionic/core';\nimport { ImageMetadata } from './atoms/image/types';\n\n/**\n * Possible states for an interactive component.\n */\nexport type ComponentState = 'ENABLED' | 'DISABLED' | 'WORKING' | 'ERROR';\nconst ENABLED: ComponentState = 'ENABLED';\nconst DISABLED: ComponentState = 'DISABLED';\nconst WORKING: ComponentState = 'WORKING';\nconst ERROR: ComponentState = 'ERROR';\n\n/**\n * Object containing all possible component states.\n */\nexport const ComponentStates = { ENABLED, DISABLED, WORKING, ERROR };\n\n/**\n * Types of actions that a button or link can perform.\n */\nexport enum ActionType {\n BROWSER_NEW_TAB, // Open in a new browser tab\n BROWSER_DOWNLOAD, // Download via browser\n NATIVE_DOWNLOAD, // Download using native capabilities\n APP_NAVIGATION, // Internal app navigation\n BROWSER_NAVIGATION, // Navigation in the browser\n}\n\n/**\n * Represents an executable action for a button or link.\n */\nexport type Action = {\n /** Action description */\n description: string;\n /** Action type */\n type: ActionType;\n /** Action source or destination */\n source: string;\n};\n\n/**\n * Supported input types for forms.\n */\nexport enum InputType {\n TEXT,\n EMAIL,\n PASSWORD,\n COMMENT,\n NUMBER,\n NUMBER_FROM_TO,\n PIN_CODE,\n DATE,\n HOUR,\n CHECK,\n RADIO,\n SELECT,\n SEARCH_SELECT,\n MULTI_SELECT,\n MULTI_SELECT_SIMPLE,\n FILE,\n}\n\n/**\n * Option for select, radio, etc. inputs.\n */\nexport type InputOption = {\n /** Unique option identifier */\n id: string;\n /** Display name */\n name: string;\n /** Whether the option is selected by default */\n selected?: boolean;\n /** Display order */\n order: number;\n};\n\n/**\n * Metadata for a form field.\n */\nexport type InputMetadata = {\n /** Associated form control */\n control: FormControl;\n /** From control (only for NUMBER_FROM_TO type) */\n fromControl?: FormControl;\n /** To control (only for NUMBER_FROM_TO type) */\n toControl?: FormControl;\n /** Unique token for the input */\n token: string;\n /** Display label */\n label: string;\n /** Field name */\n name: string;\n /** Help text */\n hint: string;\n /** Input placeholder */\n placeholder: string;\n /** Input type */\n type: InputType;\n /** Display order */\n order: number;\n /** Associated validators */\n validators: ValidatorFn[];\n /** Options (for select, radio, etc.) */\n options?: InputOption[];\n /** Allowed range (for number, date, etc.) */\n range?: {\n min: number;\n max: number;\n };\n /** Custom error messages */\n errors: {\n [key: string]: string;\n };\n /** Initial value for the field */\n value?: string;\n /** Default value configuration - string for custom defaults, true for auto defaults */\n withDefault?: string | boolean;\n /** Field state */\n state: ComponentState;\n /** Label for \"from\" field (only for NUMBER_FROM_TO type) */\n fromLabel?: string;\n /** Label for \"to\" field (only for NUMBER_FROM_TO type) */\n toLabel?: string;\n /** Placeholder for \"from\" field (only for NUMBER_FROM_TO type) */\n fromPlaceholder?: string;\n /** Placeholder for \"to\" field (only for NUMBER_FROM_TO type) */\n toPlaceholder?: string;\n};\n\n/**\n * A section in a form, grouping multiple fields.\n */\nexport type FormSection = {\n /** Section name */\n name: string;\n /** Display order */\n order: number;\n /** Fields included in the section */\n fields: InputMetadata[];\n};\n\n/**\n * Data sent when submitting a form.\n */\nexport type FormSubmit = {\n /** List of fields and their values */\n fields: { key: string; value: string }[];\n /** Optional token for the operation */\n token?: string;\n};\n\n/**\n * Metadata for a complete form.\n */\nexport type FormMetadata = {\n /** Form name */\n name: string;\n /** Form sections */\n sections: FormSection[];\n /** Action buttons configuration */\n actions: ButtonMetadata;\n /** Global form state */\n state: ComponentState;\n};\n\n/**\n * Possible action types for a toolbar.\n */\nexport enum ToolbarActionType {\n AVATAR = 'AVATAR',\n ICON = 'ICON',\n IMAGE = 'IMAGE',\n BUTTON = 'BUTTON',\n}\n\n/**\n * Toolbar action definition.\n */\nexport type ToolbarAction = {\n /** Action type */\n type: 'AVATAR' | 'ICON' | 'IMAGE' | 'BUTTON';\n /** Optional token identifier */\n token?: string;\n /** Toolbar position */\n position: 'left' | 'right' | 'center';\n /** Optional description */\n description?: string;\n /** Associated image (if any) */\n image?: ImageMetadata;\n};\n\n/**\n * Metadata for an icon.\n */\nexport interface IconMetada {\n /** Icon name */\n name: string;\n /** Icon slot position */\n slot: 'start' | 'end';\n}\n\n/**\n * Button configuration object.\n * Supports both static and reactive content.\n * @type {ButtonMetadata}\n * @property text - Static button label (takes precedence over textConfig).\n * @property textConfig - Reactive content configuration for button text.\n * @property color - The button color (Ionic color string).\n * @property icon - Icon to display (optional).\n * @property state - Button state (enabled, disabled, working, etc.).\n * @property expand, fill, size, shape, href, target, download, handler, etc. - See ButtonMetadata for all options.\n */\nexport interface ButtonMetadata {\n /** Associated action type */\n actionType?: ActionType;\n /** Button expansion */\n expand?: 'full' | 'block';\n /** Associated link */\n link?: string;\n /** Associated href link */\n href?: string;\n /** Link target */\n target?: '_blank' | '_self' | '_parent' | '_top';\n /** Download file name */\n download?: string;\n /** Button color */\n color: Color;\n /** Button state */\n state: ComponentState;\n /** Static display text (takes precedence over reactive content) */\n text?: string;\n /** Reactive content configuration for button text */\n contentKey?: string;\n /** Component class name for content lookup (required with contentKey) */\n contentClass?: string;\n /** Fallback text if contentKey is not found */\n contentFallback?: string;\n /** Values to interpolate into the content string */\n contentInterpolation?: Record<string, string | number>;\n /** Associated icon */\n icon?: IconMetada;\n /** Button shape */\n shape?: 'round';\n /** Button size */\n size?: 'small' | 'default' | 'large';\n /** Button fill */\n fill?: 'clear' | 'outline' | 'solid' | 'default';\n /** Button type */\n type: 'button' | 'submit' | 'reset';\n /** Optional token identifier */\n token?: string;\n /** Optional reference */\n ref?: any;\n /** Action handler */\n handler?: (value: any) => any | Promise<any>;\n}\n\n/**\n * Configuration for reactive content in val-button component.\n * Use this interface when you only need to specify content-related properties.\n * This follows the same pattern as TextContentConfig for consistency.\n */\nexport interface ButtonContentConfig {\n contentKey: string;\n contentClass: string;\n contentFallback?: string;\n contentInterpolation?: Record<string, string | number>;\n}\n","/**\n * Service for downloading files and opening links in new tabs.\n * Provides utility methods for browser-based file downloads and extracting file names from URLs.\n */\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DownloadService {\n /**\n * Extracts the file name from a given URL.\n * @param url The file URL\n * @returns The file name\n */\n getFileNameFromUrl(url: string): string {\n try {\n const pathSegments = url.split('/');\n const lastSegment = pathSegments[pathSegments.length - 1];\n const fileName = decodeURIComponent(lastSegment);\n return fileName;\n } catch (error) {\n console.error('Error al obtener nombre de archivo: ', JSON.stringify(error));\n return 'filename';\n }\n }\n\n /**\n * Opens a given URL in a new browser tab and triggers download if possible.\n * @param url The file URL\n */\n openNewTab(url: string): void {\n if (url) {\n const fileName = this.getFileNameFromUrl(url);\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n link.target = '_blank';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } else {\n console.error('La URL no está definida');\n }\n }\n\n /**\n * Downloads a file from the browser using fetch and triggers a download dialog.\n * @param url The file URL\n */\n downloadLinkFromBrowser(url: string): void {\n console.log('trying to download file from url');\n if (url) {\n fetch(url)\n .then(response => response.blob())\n .then(blob => {\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n\n const fileName = this.getFileNameFromUrl(url);\n link.download = `${+new Date()}-${fileName}`;\n link.target = '_self';\n link.click();\n\n window.URL.revokeObjectURL(url);\n })\n .catch(error => {\n console.error('Error al descargar el archivo:', JSON.stringify(error));\n });\n } else {\n console.error('La URL no está definida');\n }\n }\n}\n","/* eslint-disable no-underscore-dangle */\n\n/**\n * Service for opening URLs using Capacitor's InAppBrowser plugin.\n * Provides a method to open links in a popover-style browser within the app.\n */\nimport { Injectable } from '@angular/core';\nimport { Browser, OpenOptions } from '@capacitor/browser';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class InAppBrowserService {\n /**\n * Default options for the in-app browser.\n */\n options: OpenOptions = {\n presentationStyle: 'popover',\n url: '',\n };\n constructor() {}\n\n /**\n * Opens a URL using Capacitor's InAppBrowser with the configured options.\n * @param url The URL to open\n */\n async openWithInAppBrowser(url: string) {\n await Browser.open({ ...this.options, url });\n }\n}\n","import { Location } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\nimport { NavigationExtras, Router } from '@angular/router';\nimport { InAppBrowserService } from './in-app-browser.service';\n\n/**\n * Service for navigation and routing within the application.\n * Supports navigation with data transfer, in-app browser, and opening links in new tabs.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NavigationService {\n /**\n * Arbitrary data to be transferred during navigation.\n */\n data: any;\n router = inject(Router);\n location = inject(Location);\n inAppBrowser = inject(InAppBrowserService);\n\n constructor() {}\n\n /**\n * Opens a URL using the in-app browser service.\n * @param url The URL to open\n */\n navigateInApp(url: string) {\n this.inAppBrowser.openWithInAppBrowser(url);\n }\n\n /**\n * Navigates to a route and transfers data using Angular Router state.\n * @param route The route to navigate to\n * @param dataTransfer The data to transfer\n */\n navigateWithData(route: string, dataTransfer: any) {\n const navigationExtras: NavigationExtras = {\n state: {\n data: dataTransfer,\n },\n };\n\n this.router.navigate([route], navigationExtras);\n }\n\n /**\n * Navigates to a URL using Angular Router.\n * @param url The URL to navigate to\n */\n navigateByUrl(url: string) {\n this.router\n .navigateByUrl(url)\n .then(response => {})\n .catch(error => {});\n }\n\n /**\n * Opens a URL in a new browser tab.\n * @param url The URL to open\n */\n openInNewTab(url: string): void {\n window.open(url, '_blank', 'noopener,noreferrer');\n }\n\n /**\n * Navigates back to the previous page in the browser history.\n */\n back(): void {\n this.location.back();\n }\n}\n","export const LANG = 'LANG';\nexport const THEME = 'THEME';\n","/**\n * Utility service for interacting with browser localStorage in a type-safe way.\n * Provides static methods for setting, getting, removing, and clearing items.\n */\nexport class LocalStorageService {\n /**\n * Stores a value in localStorage under the given reference key.\n * @param reference The key to store the value under\n * @param value The value to store\n */\n static set<T>(reference: string, value: T): void {\n localStorage.setItem(reference, JSON.stringify(value));\n }\n\n /**\n * Retrieves a value from localStorage by key.\n * @param reference The key to retrieve\n * @returns The parsed value\n */\n static get<T>(reference: string): T {\n const value = localStorage.getItem(reference);\n return JSON.parse(value) as T;\n }\n\n /**\n * Removes an item from localStorage by key.\n * @param reference The key to remove\n */\n static remove(reference: string): void {\n localStorage.removeItem(reference);\n }\n\n /**\n * Clears all items from localStorage.\n */\n static clear() {\n localStorage.clear();\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { Provider } from './lang-provider/content';\n\nexport interface ValtechConfig {\n content: Provider;\n}\n\nexport const ValtechConfigService = new InjectionToken<ValtechConfig>('ValtechConfig');\n","export type LanguageText = {\n [key: string]: string;\n};\n\nexport type LanguagesContent = {\n [key: string]: LanguageText;\n};\n\nexport class TextContent {\n text: LanguagesContent;\n constructor(text: LanguagesContent) {\n this.text = text;\n }\n\n get Content(): LanguagesContent {\n return this.text;\n }\n}\n\n/**\n * Language code type - supports any valid language code string.\n * Common examples: 'es', 'en', 'fr', 'de', 'pt', 'it', 'zh', 'ja', etc.\n */\nexport type LangOption = string;\n\n/**\n * Common language constants for convenience.\n * Users can still use any language code string directly.\n */\nexport const LANGUAGES = {\n ES: 'es' as const,\n EN: 'en' as const,\n FR: 'fr' as const,\n DE: 'de' as const,\n PT: 'pt' as const,\n IT: 'it' as const,\n ZH: 'zh' as const,\n JA: 'ja' as const,\n} as const;\n","import { Inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, distinctUntilChanged, map, shareReplay } from 'rxjs';\nimport { LANG } from '../../shared/constants/storage';\nimport { LocalStorageService } from '../local-storage.service';\nimport { ValtechConfig, ValtechConfigService } from '../types';\nimport { Provider } from './content';\nimport { LANGUAGES, LangOption, LanguageText, LanguagesContent, TextContent } from './types';\n\n/**\n * LangService - Reactive language and content management service.\n *\n * This service provides reactive content management with Observable-based language switching.\n * Components can subscribe to content changes and automatically update when the language changes.\n *\n * The service automatically detects available languages from the content configuration\n * and provides intelligent fallbacks with console warnings for missing translations.\n *\n * @example Basic usage:\n * ```typescript\n * constructor(private langService: LangService) {}\n *\n * // Get current language\n * const currentLang = this.langService.currentLang;\n *\n * // Subscribe to language changes\n * this.langService.currentLang$.subscribe(lang => console.log('Language changed:', lang));\n *\n * // Get static text\n * const text = this.langService.getText('ComponentName', 'textKey');\n *\n * // Get reactive text\n * const text$ = this.langService.getContent('ComponentName', 'textKey');\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class LangService {\n private content: Provider;\n private defaultLang: LangOption;\n private availableLanguages: LangOption[] = [];\n private selectedLang: BehaviorSubject<LangOption>;\n private config: ValtechConfig;\n private warnedMissingLanguages = new Set<string>();\n\n constructor(@Inject(ValtechConfigService) config: ValtechConfig) {\n console.log('LangService: Injected config:', config);\n this.content = config.content;\n this.config = config;\n\n // Detect available languages from content\n this.detectAvailableLanguages();\n\n // Set default language (prefer Spanish, then English, then first available)\n this.defaultLang = this.determineDefaultLanguage();\n\n // Initialize with stored language or default\n const current = LocalStorageService.get<LangOption>(LANG);\n const initialLang = this.validateLanguage(current) || this.defaultLang;\n\n this.selectedLang = new BehaviorSubject<LangOption>(initialLang);\n\n console.log('LangService: Initialized with languages:', {\n available: this.availableLanguages,\n default: this.defaultLang,\n current: initialLang,\n });\n }\n\n /**\n * Detect available languages from the content configuration.\n * Scans all component content to find which languages are actually configured.\n */\n private detectAvailableLanguages(): void {\n const languageSet = new Set<LangOption>();\n\n Object.values(this.content).forEach(componentContent => {\n if (componentContent?.Content) {\n Object.keys(componentContent.Content).forEach(lang => {\n languageSet.add(lang);\n });\n }\n });\n\n this.availableLanguages = Array.from(languageSet).sort();\n\n if (this.availableLanguages.length === 0) {\n console.warn('LangService: No languages detected in content configuration!');\n this.availableLanguages = [LANGUAGES.ES]; // Fallback\n }\n }\n\n /**\n * Determine the best default language based on available content.\n */\n private determineDefaultLanguage(): LangOption {\n // Preference order: Spanish, English, then first available\n const preferredOrder = [LANGUAGES.ES, LANGUAGES.EN];\n\n for (const preferred of preferredOrder) {\n if (this.availableLanguages.includes(preferred)) {\n return preferred;\n }\n }\n\n return this.availableLanguages[0];\n }\n\n /**\n * Validate if a language is available in the content.\n */\n private validateLanguage(lang: LangOption | null): LangOption | null {\n if (!lang) return null;\n return this.availableLanguages.includes(lang) ? lang : null;\n }\n\n /**\n * Get the best available language for a component and key.\n * Provides intelligent fallback with warnings.\n */\n private getBestAvailableContent(\n className: string,\n key: string,\n requestedLang: LangOption\n ): {\n content: string | undefined;\n actualLang: LangOption;\n shouldWarn: boolean;\n } {\n const componentContent = this.content[className];\n\n if (!componentContent) {\n return {\n content: undefined,\n actualLang: requestedLang,\n shouldWarn: false,\n };\n }\n\n // Try requested language first\n const requestedContent = componentContent.Content[requestedLang];\n if (requestedContent?.[key]) {\n return {\n content: requestedContent[key],\n actualLang: requestedLang,\n shouldWarn: false,\n };\n }\n\n // Language not available, try fallbacks\n const warningKey = `${className}.${key}.${requestedLang}`;\n const shouldWarn = !this.warnedMissingLanguages.has(warningKey);\n\n if (shouldWarn) {\n this.warnedMissingLanguages.add(warningKey);\n }\n\n // Try default language\n if (requestedLang !== this.defaultLang) {\n const defaultContent = componentContent.Content[this.defaultLang];\n if (defaultContent?.[key]) {\n return {\n content: defaultContent[key],\n actualLang: this.defaultLang,\n shouldWarn,\n };\n }\n }\n\n // Try first available language\n for (const availableLang of this.availableLanguages) {\n const availableContent = componentContent.Content[availableLang];\n if (availableContent?.[key]) {\n return {\n content: availableContent[key],\n actualLang: availableLang,\n shouldWarn,\n };\n }\n }\n\n return {\n content: undefined,\n actualLang: requestedLang,\n shouldWarn,\n };\n }\n\n /**\n * Observable that emits the current language whenever it changes.\n * Use this to subscribe to language changes in components.\n */\n get currentLang$(): Observable<LangOption> {\n return this.selectedLang.asObservable().pipe(\n distinctUntilChanged(),\n shareReplay(1) // Ensure new subscribers get the current value\n );\n }\n\n /**\n * Get the current language synchronously.\n */\n get currentLang(): LangOption {\n return this.selectedLang.value;\n }\n\n /**\n * Get array of available languages detected from content.\n */\n get availableLangs(): LangOption[] {\n return [...this.availableLanguages];\n }\n\n /**\n * Get the default language.\n */\n get defaultLanguage(): LangOption {\n return this.defaultLang;\n }\n\n /**\n * Set the current language and persist it to localStorage.\n * This will trigger updates in all reactive content subscriptions.\n *\n * Validates that the language is available and warns if not.\n *\n * @param lang - The language to set\n */\n setLang(lang: LangOption): void {\n if (!this.availableLanguages.includes(lang)) {\n console.warn(\n `LangService: Language \"${lang}\" is not available. Available languages:`,\n this.availableLanguages\n );\n console.warn(`LangService: Falling back to default language \"${this.defaultLang}\"`);\n lang = this.defaultLang;\n }\n\n this.selectedLang.next(lang);\n LocalStorageService.set<LangOption>(LANG, lang);\n }\n\n /**\n * Get content for a component class and key (legacy method).\n *\n * @deprecated Use getText() or getContent() for better type safety\n */\n Text(className: string): LanguageText {\n const componentContent = this.content[className];\n return componentContent?.Content[this.selectedLang.value] || {};\n }\n\n /**\n * Get a single content string synchronously for the current language.\n * Provides intelligent fallback with warnings for missing translations.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param fallback - Optional fallback text if key is not found\n * @returns The text string or fallback\n */\n getText(className: string, key: string, fallback?: string): string {\n const result = this.getBestAvailableContent(className, key, this.selectedLang.value);\n\n if (result.shouldWarn && result.actualLang !== this.selectedLang.value) {\n console.warn(\n `LangService: Content \"${className}.${key}\" not available in \"${this.selectedLang.value}\".`,\n `Using \"${result.actualLang}\" instead. Available languages:`,\n this.availableLanguages\n );\n }\n\n return result.content || fallback || `[${className}.${key}]`;\n }\n\n /**\n * Get a reactive Observable for a specific text key that updates when language changes.\n * This is the recommended method for components that need reactive content.\n * Provides intelligent fallback with warnings for missing translations.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param fallback - Optional fallback text if key is not found\n * @returns Observable that emits the text string whenever language changes\n */\n getContent(className: string, key: string, fallback?: string): Observable<string> {\n return this.currentLang$.pipe(\n map(lang => {\n const result = this.getBestAvailableContent(className, key, lang);\n\n if (result.shouldWarn && result.actualLang !== lang) {\n console.warn(\n `LangService: Content \"${className}.${key}\" not available in \"${lang}\".`,\n `Using \"${result.actualLang}\" instead. Available languages:`,\n this.availableLanguages\n );\n }\n\n return result.content || fallback || `[${className}.${key}]`;\n }),\n distinctUntilChanged()\n );\n }\n\n /**\n * Get reactive content for multiple keys at once.\n * Provides intelligent fallback with warnings for missing translations.\n *\n * @param className - The component class name\n * @param keys - Array of text keys to retrieve\n * @returns Observable that emits an object with all requested keys\n */\n getMultipleContent(className: string, keys: string[]): Observable<Record<string, string>> {\n return this.currentLang$.pipe(\n map(lang => {\n const result: Record<string, string> = {};\n\n keys.forEach(key => {\n const contentResult = this.getBestAvailableContent(className, key, lang);\n\n if (contentResult.shouldWarn && contentResult.actualLang !== lang) {\n console.warn(\n `LangService: Content \"${className}.${key}\" not available in \"${lang}\".`,\n `Using \"${contentResult.actualLang}\" instead.`\n );\n }\n\n result[key] = contentResult.content || `[${className}.${key}]`;\n });\n\n return result;\n }),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n /**\n * Check if a content key exists for a component in any available language.\n *\n * @param className - The component class name\n * @param key - The text key\n * @returns True if the key exists in any language\n */\n hasContent(className: string, key: string): boolean {\n const classContent = this.content[className];\n if (!classContent) return false;\n\n return Object.values(classContent.Content).some(\n langContent => langContent && typeof langContent[key] === 'string'\n );\n }\n\n /**\n * Check if a content key exists for a component in a specific language.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param lang - The language to check (defaults to current language)\n * @returns True if the key exists in the specified language\n */\n hasContentInLanguage(className: string, key: string, lang?: LangOption): boolean {\n const targetLang = lang || this.currentLang;\n const classContent = this.content[className]?.Content[targetLang];\n return classContent && typeof classContent[key] === 'string';\n }\n\n /**\n * Get available languages for a specific component.\n *\n * @param className - The component class name\n * @returns Array of language codes available for the component\n */\n getAvailableLanguagesForComponent(className: string): LangOption[] {\n const classContent = this.content[className];\n if (!classContent) return [];\n\n return Object.keys(classContent.Content).filter(\n lang => classContent.Content[lang] && Object.keys(classContent.Content[lang]).length > 0\n );\n }\n\n /**\n * Get missing content keys for a component in a specific language.\n * Useful for identifying incomplete translations.\n *\n * @param className - The component class name\n * @param lang - The language to check\n * @param referenceLang - The reference language to compare against (defaults to default language)\n * @returns Array of missing keys\n */\n getMissingContentKeys(className: string, lang: LangOption, referenceLang?: LangOption): string[] {\n const refLang = referenceLang || this.defaultLang;\n const classContent = this.content[className];\n\n if (!classContent) return [];\n\n const referenceContent = classContent.Content[refLang] || {};\n const targetContent = classContent.Content[lang] || {};\n\n return Object.keys(referenceContent).filter(\n key => !targetContent[key] || typeof targetContent[key] !== 'string'\n );\n }\n\n /**\n * Register or update content for a component dynamically.\n * This allows registering content at runtime without APP_INITIALIZER.\n *\n * @param className - The component class name\n * @param content - The multilingual content object\n * @param merge - Whether to merge with existing content (default: true)\n *\n * @example\n * ```typescript\n * this.langService.registerContent('MyComponent', {\n * [LANGUAGES.ES]: { title: 'Título', description: 'Descripción' },\n * [LANGUAGES.EN]: { title: 'Title', description: 'Description' }\n * });\n * ```\n */\n registerContent(className: string, content: LanguagesContent, merge: boolean = true): void {\n if (!className) {\n console.error('LangService: className is required for registerContent');\n return;\n }\n\n if (!content || typeof content !== 'object') {\n console.error('LangService: Invalid content provided for registerContent');\n return;\n }\n\n console.log(`LangService: Registering content for \"${className}\"`, {\n merge,\n languages: Object.keys(content),\n });\n\n // Initialize component content if it doesn't exist\n if (!this.content[className]) {\n this.content[className] = new TextContent({});\n }\n\n // Merge or replace content for each language\n Object.entries(content).forEach(([lang, langContent]) => {\n if (!langContent || typeof langContent !== 'object') {\n console.warn(`LangService: Invalid content for language \"${lang}\" in \"${className}\"`);\n return;\n }\n\n if (!this.content[className].Content[lang]) {\n this.content[className].Content[lang] = {};\n }\n\n if (merge) {\n this.content[className].Content[lang] = {\n ...this.content[className].Content[lang],\n ...langContent,\n };\n } else {\n this.content[className].Content[lang] = { ...langContent };\n }\n });\n\n // Update available languages\n this.detectAvailableLanguages();\n\n console.log(`LangService: Content registered successfully for \"${className}\"`);\n }\n\n /**\n * Update multiple content registrations at once.\n *\n * @param contentMap - Map of className to content\n * @param merge - Whether to merge with existing content (default: true)\n *\n * @example\n * ```typescript\n * this.langService.registerMultipleContent({\n * 'Component1': { [LANGUAGES.ES]: { key1: 'valor1' } },\n * 'Component2': { [LANGUAGES.EN]: { key2: 'value2' } }\n * });\n * ```\n */\n registerMultipleContent(\n contentMap: Record<string, LanguagesContent>,\n merge: boolean = true\n ): void {\n if (!contentMap || typeof contentMap !== 'object') {\n console.error('LangService: Invalid contentMap provided for registerMultipleContent');\n return;\n }\n\n console.log('LangService: Registering multiple content entries', {\n classes: Object.keys(contentMap),\n merge,\n });\n\n Object.entries(contentMap).forEach(([className, content]) => {\n this.registerContent(className, content, merge);\n });\n\n console.log('LangService: Multiple content registration completed');\n }\n\n /**\n * Remove content for a specific component.\n *\n * @param className - The component class name to remove\n */\n removeContent(className: string): void {\n if (!className) {\n console.error('LangService: className is required for removeContent');\n return;\n }\n\n if (this.content[className]) {\n delete this.content[className];\n this.detectAvailableLanguages();\n console.log(`LangService: Content removed for \"${className}\"`);\n } else {\n console.warn(`LangService: No content found for \"${className}\" to remove`);\n }\n }\n\n /**\n * Get a list of all registered component classes.\n *\n * @returns Array of registered class names\n */\n getRegisteredClasses(): string[] {\n return Object.keys(this.content);\n }\n\n /**\n * Get the complete content configuration (for debugging purposes).\n * Returns a deep copy to prevent accidental mutations.\n *\n * @returns Complete content configuration\n */\n getContentConfiguration(): Provider {\n return JSON.parse(JSON.stringify(this.content));\n }\n\n /**\n * Clear all content and reset to initial state.\n * Useful for testing or complete reinitialization.\n */\n clearAllContent(): void {\n console.log('LangService: Clearing all content');\n this.content = {};\n this.availableLanguages = [LANGUAGES.ES]; // Reset to default\n this.warnedMissingLanguages.clear();\n console.log('LangService: All content cleared');\n }\n\n /**\n * Get content with interpolation support.\n * Retrieves content and replaces placeholders with provided values.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param interpolationData - Object with values to interpolate\n * @param fallback - Optional fallback text if key is not found\n * @returns Text with interpolated values\n */\n getTextWithInterpolation(\n className: string,\n key: string,\n interpolationData?: Record<string, string | number>,\n fallback?: string\n ): string {\n const content = this.getText(className, key, fallback);\n return this.interpolateString(content, interpolationData);\n }\n\n /**\n * Get reactive content with interpolation support.\n * Returns an Observable that emits interpolated content when language changes.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param interpolationData - Object with values to interpolate\n * @param fallback - Optional fallback text if key is not found\n * @returns Observable that emits interpolated text\n */\n getContentWithInterpolation(\n className: string,\n key: string,\n interpolationData?: Record<string, string | number>,\n fallback?: string\n ): Observable<string> {\n return this.getContent(className, key, fallback).pipe(\n map(content => this.interpolateString(content, interpolationData))\n );\n }\n\n /**\n * Interpolate a string with provided values.\n * Replaces placeholders like {{key}} or {key} with actual values.\n *\n * @param content - Content string with placeholders\n * @param values - Values to interpolate\n * @returns Interpolated string\n *\n * @example\n * ```typescript\n * interpolateString('Hello {{name}}!', { name: 'World' })\n * // Returns: 'Hello World!'\n * ```\n */\n private interpolateString(content: string, values?: Record<string, string | number>): string {\n if (!values || !content) {\n return content;\n }\n\n return content.replace(/\\{\\{?(\\w+)\\}?\\}/g, (match, key) => {\n const value = values[key];\n return value !== undefined ? String(value) : match;\n });\n }\n\n /**\n * Legacy function equivalent to the old fromContentWithInterpolation.\n * Provides reactive content with interpolation support for backward compatibility.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param interpolationData - Object with values to interpolate\n * @param fallback - Optional fallback text if key is not found\n * @returns Observable that emits interpolated text\n *\n * @deprecated Use getContentWithInterpolation instead\n */\n fromContentWithInterpolation(\n className: string,\n key: string,\n interpolationData?: Record<string, string | number>,\n fallback?: string\n ): Observable<string> {\n return this.getContentWithInterpolation(className, key, interpolationData, fallback);\n }\n\n // Legacy getters/setters for backward compatibility\n get Lang(): LangOption {\n return this.currentLang;\n }\n\n set Lang(lang: LangOption) {\n this.setLang(lang);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { IonButton, IonIcon, IonSpinner, IonText } from '@ionic/angular/standalone';\nimport { Observable, Subscription, of } from 'rxjs';\nimport { DownloadService } from '../../../services/download.service';\nimport { IconService } from '../../../services/icons.service';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { NavigationService } from '../../../services/navigation.service';\nimport { interpolateStaticContent } from '../../../shared/utils/simple-content';\nimport { ActionType, ButtonContentConfig, ButtonMetadata, ComponentStates } from '../../types';\n\n@Component({\n selector: 'val-button',\n standalone: true,\n imports: [CommonModule, IonButton, IonIcon, IonSpinner, IonText],\n template: `\n <ion-button\n [type]=\"props.type\"\n [color]=\"props.color\"\n [expand]=\"props.expand\"\n [fill]=\"props.fill\"\n [size]=\"props.size\"\n [href]=\"props.href\"\n [target]=\"props.target\"\n [shape]=\"props.shape\"\n (click)=\"clickHandler()\"\n [disabled]=\"props.state === states.DISABLED\"\n [ngClass]=\"[props.size]\"\n >\n <ion-icon *ngIf=\"props.icon\" [slot]=\"props.icon.slot\" [name]=\"props.icon.name\"></ion-icon>\n <ion-spinner *ngIf=\"props.state === states.WORKING\" name=\"circular\"></ion-spinner>\n <ion-text *ngIf=\"props.state !== states.WORKING\">{{ displayText$ | async }}</ion-text>\n </ion-button>\n `,\n styleUrls: ['./button.component.scss'],\n})\n/**\n * val-button\n *\n * A customizable button supporting icons, loading state, navigation, and reactive content.\n * Supports both static text and reactive content from the content service.\n * Follows the same content pattern as val-text for consistency.\n *\n * @example Static text:\n * <val-button [props]=\"{\n * text: 'Save',\n * color: 'primary',\n * type: 'button',\n * state: 'ENABLED',\n * icon: { name: 'save', slot: 'start' }\n * }\" (onClick)=\"handler()\"></val-button>\n *\n * @example Reactive content:\n * <val-button [props]=\"{\n * contentKey: 'save',\n * contentClass: 'MyComponent',\n * contentFallback: 'Save',\n * color: 'primary',\n * type: 'button',\n * state: 'ENABLED',\n * icon: { name: 'save', slot: 'start' }\n * }\" (onClick)=\"handler()\"></val-button>\n *\n * @example Reactive content with interpolation:\n * <val-button [props]=\"{\n * contentKey: 'saveCount',\n * contentClass: 'MyComponent',\n * contentInterpolation: { count: 5 },\n * contentFallback: 'Save Items',\n * color: 'primary',\n * type: 'button',\n * state: 'ENABLED'\n * }\" (onClick)=\"handler()\"></val-button>\n *\n * @input props: ButtonMetadata - Configuration for the button (text/content, color, icon, state, etc.)\n * @output onClick - Emits when the button is clicked\n */\nexport class ButtonComponent implements OnInit, OnDestroy {\n states = ComponentStates;\n\n /**\n * Observable that provides the text content to display.\n * This will be either static text or reactive content from the language service.\n */\n displayText$: Observable<string>;\n\n private subscriptions = new Subscription();\n\n @Input()\n props!: ButtonMetadata;\n\n /**\n * Event emitted when the button is clicked.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor(\n private download: DownloadService,\n icon: IconService,\n private navigation: NavigationService,\n private langService: LangService\n ) {}\n\n ngOnInit() {\n this.setupDisplayText();\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n\n /**\n * Set up the text content observable based on the props configuration.\n * Priority: static text > reactive content with interpolation > reactive content\n * This follows the same pattern as val-text component.\n */\n private setupDisplayText(): void {\n if (this.props.text) {\n // Static text takes precedence\n if (this.props.contentInterpolation) {\n // Static text with interpolation\n const interpolatedText = interpolateStaticContent(this.props.text, this.props.contentInterpolation);\n this.displayText$ = of(interpolatedText);\n } else {\n // Simple static text\n this.displayText$ = of(this.props.text);\n }\n } else if (this.props.contentKey && this.props.contentClass) {\n // Reactive content from language service\n if (this.props.contentInterpolation) {\n // With interpolation\n this.displayText$ = this.langService.getContentWithInterpolation(\n this.props.contentClass,\n this.props.contentKey,\n this.props.contentInterpolation,\n this.props.contentFallback\n );\n } else {\n // Simple reactive content\n this.displayText$ = this.langService.getContent(\n this.props.contentClass,\n this.props.contentKey,\n this.props.contentFallback\n );\n }\n } else {\n // Fallback to empty string if no valid content configuration\n console.warn(\n 'val-button: No valid content configuration provided. Use either \"text\" for static text or \"contentKey\" + \"contentClass\" for reactive content.'\n );\n this.displayText$ = of(this.props.contentFallback || '');\n }\n }\n\n clickHandler() {\n if (this.props.state === this.states.DISABLED) {\n return;\n }\n\n if (this.props.actionType === ActionType.APP_NAVIGATION) {\n this.navigation.navigateByUrl(this.props.link);\n }\n\n if (this.props.download) {\n this.download.downloadLinkFromBrowser(this.props.download);\n }\n\n if (this.props.handler) {\n this.props.handler(this.props.ref);\n }\n\n this.onClick.emit(this.props.token);\n }\n}\n\n/**\n * Helper function to create reactive button props from content configuration.\n * This provides a convenient way to create val-button props with reactive content.\n * Follows the same pattern as createTextProps for consistency.\n *\n * @param contentConfig - Content configuration\n * @param styleConfig - Optional style and behavior configuration\n * @returns ButtonMetadata with content properties set\n *\n * @example\n * ```typescript\n * // In component\n * saveButtonProps: ButtonMetadata = createButtonProps({\n * contentKey: 'save',\n * contentClass: 'MyComponent'\n * }, {\n * color: 'primary',\n * icon: { name: 'save', slot: 'start' }\n * });\n * ```\n */\nexport function createButtonProps(\n contentConfig: ButtonContentConfig,\n styleConfig: Partial<\n Pick<ButtonMetadata, 'color' | 'type' | 'state' | 'size' | 'fill' | 'icon' | 'expand' | 'shape' | 'handler'>\n > = {}\n): ButtonMetadata {\n return {\n contentKey: contentConfig.contentKey,\n contentClass: contentConfig.contentClass,\n contentFallback: contentConfig.contentFallback,\n contentInterpolation: contentConfig.contentInterpolation,\n color: styleConfig.color || 'primary',\n type: styleConfig.type || 'button',\n state: styleConfig.state || ComponentStates.ENABLED,\n size: styleConfig.size,\n fill: styleConfig.fill,\n icon: styleConfig.icon,\n expand: styleConfig.expand,\n shape: styleConfig.shape,\n handler: styleConfig.handler,\n };\n}\n","import { ButtonMetadata, IconMetada } from '../../types';\n\nexport const Icon = (name: string, slot: 'start' | 'end'): IconMetada => {\n return {\n name,\n slot,\n };\n};\n\n/* name convention: COLOR FILL SIZE [optionals: SHAPE EXPAND ICON HREF/DOWNLOAD] TYPE */\n\nexport const BaseDefault = (text: string, type: 'button' | 'submit' | 'reset'): ButtonMetadata => {\n return {\n color: 'primary',\n state: 'ENABLED',\n text,\n size: 'default',\n type,\n };\n};\n\nexport const ClearDefault = (text: string, type: 'button' | 'submit' | 'reset'): ButtonMetadata => {\n return { ...BaseDefault(text, type), fill: 'clear' };\n};\n\nexport const ClearDefaultRound = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...ClearDefault(text, type), shape: 'round' };\n};\n\nexport const SolidDefault = (text: string, type: 'button' | 'submit' | 'reset'): ButtonMetadata => {\n return { ...BaseDefault(text, type), fill: 'solid' };\n};\n\nexport const SolidDefaultRound = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...SolidDefault(text, type), shape: 'round' };\n};\n\nexport const OutlineDefault = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...BaseDefault(text, type), fill: 'outline' };\n};\n\nexport const OutlineDefaultRound = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...OutlineDefault(text, type), shape: 'round' };\n};\n\nexport const ClearDefaultFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...ClearDefault(text, type), expand: 'full' };\n};\n\nexport const ClearDefaultRoundFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...ClearDefaultRound(text, type), expand: 'full' };\n};\n\nexport const ClearDefaultBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...ClearDefault(text, type), expand: 'block' };\n};\n\nexport const ClearDefaultRoundBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...ClearDefaultRound(text, type), expand: 'block' };\n};\n\nexport const SolidDefaultFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...SolidDefault(text, type), expand: 'full' };\n};\n\nexport const SolidDefaultRoundFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...SolidDefaultRound(text, type), expand: 'full' };\n};\n\nexport const SolidDefaultBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...SolidDefault(text, type), expand: 'block' };\n};\n\nexport const SolidDefaultRoundBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...SolidDefaultRound(text, type), expand: 'block' };\n};\n\nexport const OutlineDefaultFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...OutlineDefault(text, type), expand: 'full' };\n};\n\nexport const OutlineDefaultRoundFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...OutlineDefaultRound(text, type), expand: 'full' };\n};\n\nexport const OutlineDefaultBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...OutlineDefault(text, type), expand: 'block' };\n};\n\nexport const OutlineDefaultRoundBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...OutlineDefaultRound(text, type), expand: 'block' };\n};\n\nexport const SolidDefaultButton = (text: string): ButtonMetadata => {\n return SolidDefault(text, 'button');\n};\n\nexport const SolidSmallButton = (text: string): ButtonMetadata => {\n return { ...SolidDefault(text, 'button'), size: 'small' };\n};\n\nexport const SolidLargeButton = (text: string): ButtonMetadata => {\n return { ...SolidDefault(text, 'button'), size: 'large' };\n};\n\nexport const SolidDefaultRoundButton = (text: string): ButtonMetadata => {\n return SolidDefaultRound(text, 'button');\n};\n\nexport const SolidSmallRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidDefaultRound(text, 'button'), size: 'small' };\n};\n\nexport const SolidLargeRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidDefaultRound(text, 'button'), size: 'large' };\n};\n\nexport const SolidFullButton = (text: string): ButtonMetadata => {\n return SolidDefaultFull(text, 'button');\n};\n\nexport const SolidBlockButton = (text: string): ButtonMetadata => {\n return SolidDefaultBlock(text, 'button');\n};\n\n/** PRIMARY */\n\nexport const PrimarySolidDefaultRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidDefaultRoundButton(text), color: 'primary' };\n};\n\nexport const PrimarySolidDefaultRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...PrimarySolidDefaultRoundButton(text), icon };\n};\n\nexport const PrimarySolidDefaultRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidDefaultRoundButton(text), href, target };\n};\n\nexport const PrimarySolidDefaultRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidDefaultRoundIconButton(text, icon), href, target };\n};\n\nexport const PrimarySolidSmallRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidSmallRoundButton(text), color: 'primary' };\n};\n\nexport const PrimarySolidSmallRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...PrimarySolidSmallRoundButton(text), icon };\n};\n\nexport const PrimarySolidSmallRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidSmallRoundButton(text), href, target };\n};\n\nexport const PrimarySolidSmallRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidSmallRoundIconButton(text, icon), href, target };\n};\n\nexport const PrimarySolidLargeRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidLargeRoundButton(text), color: 'primary' };\n};\n\nexport const PrimarySolidLargeRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...PrimarySolidLargeRoundButton(text), icon };\n};\n\nexport const PrimarySolidLargeRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidLargeRoundButton(text), href, target };\n};\n\nexport const PrimarySolidLargeRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidLargeRoundIconButton(text, icon), href, target };\n};\n\nexport const PrimarySolidBlockButton = (text: string): ButtonMetadata => {\n return { ...SolidBlockButton(text), color: 'primary' };\n};\n\nexport const PrimarySolidBlockIconButton = (text: string, icon: IconMetada): ButtonMetadata => {\n return { ...PrimarySolidBlockButton(text), icon };\n};\n\nexport const PrimarySolidBlockHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidBlockButton(text), href, target };\n};\n\nexport const PrimarySolidBlockIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidBlockIconButton(text, icon), href, target };\n};\n\nexport const PrimarySolidFullButton = (text: string): ButtonMetadata => {\n return { ...SolidFullButton(text), color: 'primary' };\n};\n\nexport const PrimarySolidFullIconButton = (text: string, icon: IconMetada): ButtonMetadata => {\n return { ...PrimarySolidFullButton(text), icon };\n};\n\nexport const PrimarySolidFullHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidFullButton(text), href, target };\n};\n\nexport const PrimarySolidFullIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidFullIconButton(text, icon), href, target };\n};\n\n/** SECONDARY */\n\nexport const SecondarySolidDefaultRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidDefaultRoundButton(text), color: 'secondary' };\n};\n\nexport const SecondarySolidDefaultRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...SecondarySolidDefaultRoundButton(text), icon };\n};\n\nexport const SecondarySolidDefaultRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidDefaultRoundButton(text), href, target };\n};\n\nexport const SecondarySolidDefaultRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidDefaultRoundIconButton(text, icon), href, target };\n};\n\nexport const SecondarySolidSmallRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidSmallRoundButton(text), color: 'secondary' };\n};\n\nexport const SecondarySolidSmallRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...SecondarySolidSmallRoundButton(text), icon };\n};\n\nexport const SecondarySolidSmallRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidSmallRoundButton(text), href, target };\n};\n\nexport const SecondarySolidSmallRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidSmallRoundIconButton(text, icon), href, target };\n};\n\nexport const SecondarySolidLargeRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidLargeRoundButton(text), color: 'secondary' };\n};\n\nexport const SecondarySolidLargeRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...SecondarySolidLargeRoundButton(text), icon };\n};\n\nexport const SecondarySolidLargeRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidLargeRoundButton(text), href, target };\n};\n\nexport const SecondarySolidLargeRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidLargeRoundIconButton(text, icon), href, target };\n};\n\nexport const SecondarySolidFullButton = (text: string): ButtonMetadata => {\n return { ...SolidFullButton(text), color: 'secondary' };\n};\n\nexport const SecondarySolidFullIconButton = (text: string, icon: IconMetada): ButtonMetadata => {\n return { ...SecondarySolidFullButton(text), icon };\n};\n\nexport const SecondarySolidFullHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidFullButton(text), href, target };\n};\n\nexport const SecondarySolidFullIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidFullIconButton(text, icon), href, target };\n};\n\nexport const SecondarySolidBlockButton = (text: string): ButtonMetadata => {\n return { ...SolidBlockButton(text), color: 'secondary' };\n};\n\nexport const SecondarySolidBlockIconButton = (text: string, icon: IconMetada): ButtonMetadata => {\n return { ...SecondarySolidBlockButton(text), icon };\n};\n\nexport const SecondarySolidBlockHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidBlockButton(text), href, target };\n};\n\nexport const SecondarySolidBlockIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidBlockIconButton(text, icon), href, target };\n};\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport { IonText } from '@ionic/angular/standalone';\nimport { Observable, of, Subscription } from 'rxjs';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { DisplayContentConfig, DisplayMetadata } from './types';\n\n@Component({\n selector: 'val-display',\n standalone: true,\n imports: [CommonModule, IonText],\n template: `\n <ion-text [color]=\"props.color\">\n <p [class]=\"props.size\">\n {{ displayContent$ | async }}\n </p>\n </ion-text>\n `,\n styleUrls: ['./display.component.scss'],\n})\n/**\n * val-display\n *\n * Displays prominent text or titles with custom color and size.\n * Supports both static and reactive content patterns.\n *\n * @example\n * // Static content\n * <val-display [props]=\"{ content: 'Title', color: 'dark', size: 'large' }\"></val-display>\n *\n * // Reactive content\n * <val-display [props]=\"{ contentConfig: { key: 'welcome.title' }, color: 'primary', size: 'xlarge' }\"></val-display>\n *\n * @input props: DisplayMetadata - Configuration for the display (content/contentConfig, color, size)\n */\nexport class DisplayComponent implements OnInit, OnChanges, OnDestroy {\n displayContent$: Observable<string>;\n private subscriptions = new Subscription();\n\n /**\n * Display configuration object.\n * @type {DisplayMetadata}\n * @property content - Static text to display (takes precedence over contentConfig).\n * @property contentConfig - Reactive content configuration.\n * @property color - The text color (Ionic color string).\n * @property size - The text size ('small' | 'medium' | 'large' | 'xlarge').\n */\n @Input()\n props: DisplayMetadata;\n\n private langService = inject(LangService);\n private cdr = inject(ChangeDetectorRef);\n\n constructor() {}\n\n ngOnInit() {\n this.initializeDisplayContent();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n this.initializeDisplayContent();\n this.cdr.detectChanges();\n }\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n\n private initializeDisplayContent() {\n // Static content takes precedence\n if (this.props.content !== undefined) {\n this.displayContent$ = of(this.props.content);\n return;\n }\n\n // Use reactive content if configured\n if (this.props.contentConfig) {\n this.displayContent$ = this.langService.getContent(\n this.props.contentConfig.className || '_global',\n this.props.contentConfig.key,\n this.props.contentConfig.fallback || this.props.contentConfig.key\n // interpolation: this.props.contentConfig.interpolation,\n );\n return;\n }\n\n // No content configured - use empty string\n this.displayContent$ = of('');\n }\n}\n\n/**\n * Helper function to create reactive display props from content configuration.\n * This provides a convenient way to create val-display props with reactive content.\n *\n * @param contentConfig - Content configuration for reactive content\n * @param styleConfig - Optional style configuration (color and size)\n * @returns DisplayMetadata with content properties set\n *\n * @example\n * ```typescript\n * // In component\n * titleProps: DisplayMetadata = createDisplayProps({\n * key: 'title',\n * className: 'HeaderComponent',\n * fallback: 'Default Title'\n * }, {\n * color: 'primary',\n * size: 'large'\n * });\n * ```\n *\n * @example\n * ```typescript\n * // With interpolation\n * greetingProps: DisplayMetadata = createDisplayProps({\n * key: 'greeting',\n * className: 'UserComponent',\n * fallback: 'Hello!',\n * interpolation: { name: 'John', count: 5 }\n * }, {\n * color: 'secondary',\n * size: 'medium'\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Using default style values\n * simpleProps: DisplayMetadata = createDisplayProps({\n * key: 'welcomeMessage',\n * className: 'HomeComponent'\n * }); // Will use default color: 'dark' and size: 'medium'\n * ```\n */\nexport function createDisplayProps(\n contentConfig: DisplayContentConfig,\n styleConfig: Partial<Pick<DisplayMetadata, 'color' | 'size'>> = {}\n): DisplayMetadata {\n return {\n contentConfig: {\n key: contentConfig.key,\n className: contentConfig.className,\n fallback: contentConfig.fallback,\n interpolation: contentConfig.interpolation,\n },\n color: styleConfig.color || 'dark',\n size: styleConfig.size || 'medium',\n };\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { DividerMetadata } from './types';\n\n/**\n * val-divider\n *\n * A horizontal divider for separating content sections.\n *\n * @example\n * <val-divider [props]=\"{ size: 'medium', color: 'light', fill: 'solid' }\"></val-divider>\n *\n * @input props: DividerMetadata - Configuration for the divider (size, color, fill)\n */\n@Component({\n selector: 'val-divider',\n standalone: true,\n imports: [CommonModule],\n template: ` <div [ngClass]=\"['divider', props.size, props.color, props.fill]\"></div> `,\n styleUrls: ['./divider.component.scss'],\n})\nexport class DividerComponent implements OnInit {\n /**\n * Divider configuration object.\n * @type {DividerMetadata}\n * @property size - The divider size ('small' | 'medium' | 'large').\n * @property color - The divider color.\n * @property fill - The divider fill style ('solid' | 'gradient').\n */\n @Input()\n props: DividerMetadata;\n constructor() {}\n\n ngOnInit() {}\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { DownloadService } from '../../../services/download.service';\nimport { HrefMetadata } from './types';\n\n@Component({\n selector: 'val-href',\n standalone: true,\n imports: [CommonModule],\n template: `\n <a\n [ngClass]=\"[props.color]\"\n [class.hoverable]=\"props.hoverable\"\n [href]=\"props.url\"\n target=\"_blank\"\n (click)=\"onClickHandler($event)\"\n >{{ props.text }}</a\n >\n `,\n styleUrls: ['./href.component.scss'],\n})\n/**\n * val-href\n *\n * A styled anchor/link element, supporting download and click events.\n *\n * @example\n * <val-href [props]=\"{ url: 'https://...', text: 'Open', color: 'primary', download: true }\" (onClick)=\"handler()\"></val-href>\n *\n * @input props: HrefMetadata - Configuration for the link (url, text, color, download, etc.)\n * @output onClick - Emits when the link is clicked\n */\nexport class HrefComponent implements OnInit {\n /**\n * Link configuration object.\n * @type {HrefMetadata}\n * @property url - The URL to open.\n * @property text - The link text.\n * @property color - The link color (Ionic color string).\n * @property download - Whether to trigger a download (optional).\n * @property hoverable - Whether the link is hoverable (optional).\n * @property token - Optional token for event identification.\n */\n @Input() props: HrefMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor(private downloadService: DownloadService) {}\n\n ngOnInit() {}\n\n getFileName() {\n return this.downloadService.getFileNameFromUrl(this.props.url);\n }\n\n onClickHandler(event: MouseEvent) {\n if (this.props.download && this.props.url) {\n event.preventDefault();\n this.downloadService.downloadLinkFromBrowser(this.props.url);\n }\n this.onClick.emit(this.props.token);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { IonIcon } from '@ionic/angular/standalone';\nimport { IconService } from '../../../services/icons.service';\nimport { IconMetadata } from './types';\n\n@Component({\n selector: 'val-icon',\n standalone: true,\n imports: [CommonModule, IonIcon],\n template: ` <ion-icon aria-hidden=\"true\" [ngClass]=\"[props.size]\" [name]=\"props.name\" [color]=\"props.color\" /> `,\n styleUrls: ['./icon.component.scss'],\n})\n/**\n * val-icon\n *\n * Displays an icon from the Ionicons set, with configurable size and color.\n *\n * @example\n * <val-icon [props]=\"{ name: 'star', size: 'large', color: 'warning' }\"></val-icon>\n *\n * @input props: IconMetadata - Configuration for the icon (name, color, size)\n */\nexport class IconComponent implements OnInit {\n /**\n * Icon configuration object.\n * @type {IconMetadata}\n * @property name - The icon name (Ionicons).\n * @property color - The icon color (Ionic color string).\n * @property size - The icon size ('small' | 'medium' | 'large' | 'xlarge').\n */\n @Input()\n props: IconMetadata;\n\n constructor(service: IconService) {}\n\n ngOnInit() {}\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, HostListener, inject, Input, OnInit } from '@angular/core';\nimport {\n IonButton,\n IonButtons,\n IonContent,\n IonHeader,\n IonIcon,\n IonModal,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { ImageMetadata } from './types';\n\n@Component({\n selector: 'val-image',\n standalone: true,\n imports: [CommonModule, IonModal, IonHeader, IonToolbar, IonTitle, IonContent, IonButton, IonIcon, IonButtons],\n template: `\n <figure\n class=\"val-image-container\"\n [class]=\"props.containerClass\"\n [ngClass]=\"{\n 'val-image-container--left': props.alignment === 'left',\n 'val-image-container--center': props.alignment === 'center' || !props.alignment,\n 'val-image-container--right': props.alignment === 'right',\n }\"\n [ngStyle]=\"{\n display: props.flex ? 'flex' : 'inline-block',\n }\"\n >\n <div class=\"val-image-wrapper\">\n @if (props.src.includes('--')) {\n <img\n class=\"val-image\"\n [ngClass]=\"[\n props.mode,\n !props.width ? props.size : '',\n props.previewMode ? 'val-image--preview-enabled' : '',\n ]\"\n [ngStyle]=\"{\n content: 'var(' + props.src + ')',\n }\"\n [class.bordered]=\"props.bordered\"\n [class.shaded]=\"props.shaded\"\n [class.dark]=\"props.dark\"\n [class.limited]=\"props.limited\"\n [class.center]=\"props.alignment === 'center'\"\n [alt]=\"props.alt\"\n [style.width.rem]=\"props.width\"\n [style.max-width.rem]=\"props.width\"\n [style.height.px]=\"props.height\"\n (click)=\"props.previewMode ? openPreview() : null\"\n />\n } @else {\n <img\n class=\"val-image\"\n [ngClass]=\"[\n props.mode,\n !props.width ? props.size : '',\n props.previewMode ? 'val-image--preview-enabled' : '',\n ]\"\n [class.bordered]=\"props.bordered\"\n [class.shaded]=\"props.shaded\"\n [class.dark]=\"props.dark\"\n [class.limited]=\"props.limited\"\n [class.center]=\"props.alignment === 'center'\"\n [src]=\"props.src\"\n [alt]=\"props.alt\"\n [style.width.rem]=\"props.width\"\n [style.max-width.rem]=\"props.width\"\n [style.height.px]=\"props.height\"\n (click)=\"props.previewMode ? openPreview() : null\"\n />\n }\n </div>\n\n @if (props.caption) {\n <figcaption\n class=\"val-image-caption\"\n [ngClass]=\"{\n 'val-image-caption--small': props.captionSize === 'small',\n 'val-image-caption--medium': props.captionSize === 'medium' || !props.captionSize,\n 'val-image-caption--large': props.captionSize === 'large',\n }\"\n >\n {{ props.caption }}\n </figcaption>\n }\n </figure>\n\n <!-- Modal de previsualización con ion-modal -->\n <ion-modal [isOpen]=\"isPreviewOpen\" (didDismiss)=\"closePreview()\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <!-- <ion-title>{{ props.alt || 'Previsualización de imagen' }}</ion-title> -->\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"closePreview()\" fill=\"clear\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n\n <ion-content>\n <!-- Controles de zoom -->\n <div class=\"val-image-preview-controls\">\n <ion-button\n (click)=\"zoomOut(); $event.stopPropagation()\"\n [disabled]=\"zoomLevel <= minZoom\"\n fill=\"clear\"\n size=\"small\"\n >\n <ion-icon name=\"remove-outline\"></ion-icon>\n </ion-button>\n\n <span class=\"val-image-preview-zoom-level\">{{ Math.round(zoomLevel * 100) }}%</span>\n\n <ion-button\n (click)=\"zoomIn(); $event.stopPropagation()\"\n [disabled]=\"zoomLevel >= maxZoom\"\n fill=\"clear\"\n size=\"small\"\n >\n <ion-icon name=\"add-outline\"></ion-icon>\n </ion-button>\n </div>\n\n <!-- Imagen ampliada -->\n <div\n class=\"val-image-preview-viewport\"\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd($event)\"\n (wheel)=\"onWheel($event)\"\n (mousedown)=\"onMouseDown($event)\"\n (mousemove)=\"onMouseMove($event)\"\n (mouseup)=\"onMouseUp($event)\"\n (mouseleave)=\"onMouseUp($event)\"\n >\n <img\n #previewImage\n class=\"val-image-preview-img\"\n [src]=\"props.src.includes('--') ? null : props.src\"\n [ngStyle]=\"{\n content: props.src.includes('--') ? 'var(' + props.src + ')' : null,\n transform: 'scale(' + zoomLevel + ') translate(' + panX + 'px, ' + panY + 'px)',\n cursor: isDragging ? 'grabbing' : zoomLevel > 1 ? 'grab' : 'default',\n }\"\n [alt]=\"props.alt\"\n draggable=\"false\"\n />\n </div>\n </ion-content>\n </ng-template>\n </ion-modal>\n `,\n styleUrls: ['./image.component.scss'],\n})\n/**\n * val-image\n *\n * Displays an image with various display options (bordered, shaded, dark, etc).\n * Now includes a container wrapper for better flexbox support and alignment options.\n *\n * NEW: Optional preview mode with full-screen zoom capabilities:\n * - Click to open full-screen preview (when previewMode is enabled)\n * - Pinch-to-zoom on mobile devices\n * - Mouse wheel zoom on desktop\n * - Pan/drag to navigate zoomed images\n * - Zoom controls with buttons\n * - Keyboard shortcuts (Esc to close, +/- to zoom, 0 to reset)\n * - Touch-friendly interface with gesture support\n *\n * @example Basic usage:\n * <val-image [props]=\"{\n * src: 'url',\n * alt: 'desc',\n * width: 100,\n * height: 100,\n * bordered: true,\n * alignment: 'center',\n * caption: 'Image description'\n * }\"></val-image>\n *\n * @example With preview mode:\n * <val-image [props]=\"{\n * src: 'url',\n * alt: 'desc',\n * previewMode: true,\n * bordered: true,\n * alignment: 'center'\n * }\"></val-image>\n *\n * @input props: ImageMetadata - Configuration for the image (src, alt, size, mode, alignment, caption, previewMode, etc.)\n */\nexport class ImageComponent implements OnInit {\n @Input()\n props!: ImageMetadata;\n\n available: boolean = true;\n\n // Preview mode properties\n isPreviewOpen: boolean = false;\n zoomLevel: number = 1;\n minZoom: number = 0.5;\n maxZoom: number = 5;\n panX: number = 0;\n panY: number = 0;\n\n // Touch and mouse interaction properties\n isDragging: boolean = false;\n lastPanX: number = 0;\n lastPanY: number = 0;\n startX: number = 0;\n startY: number = 0;\n\n // Touch gesture properties\n initialDistance: number = 0;\n initialZoom: number = 1;\n touches: Touch[] = [];\n\n // Lang service\n langService = inject(LangService);\n\n // Math for template\n Math = Math;\n\n constructor() {}\n\n ngOnInit() {\n // Set default values\n if (!this.props.alignment) {\n this.props.alignment = 'center';\n }\n if (!this.props.captionSize) {\n this.props.captionSize = 'medium';\n }\n if (!this.props.mode) {\n this.props.mode = 'box';\n }\n }\n\n changeToVisible() {\n setInterval(() => {\n this.available = true;\n }, 100);\n }\n\n // Preview mode methods\n openPreview() {\n if (!this.props.previewMode) return;\n this.isPreviewOpen = true;\n this.resetZoom();\n }\n\n closePreview() {\n this.isPreviewOpen = false;\n }\n\n // Zoom methods\n zoomIn() {\n if (this.zoomLevel < this.maxZoom) {\n this.zoomLevel = Math.min(this.zoomLevel * 1.2, this.maxZoom);\n }\n }\n\n zoomOut() {\n if (this.zoomLevel > this.minZoom) {\n this.zoomLevel = Math.max(this.zoomLevel / 1.2, this.minZoom);\n // Reset pan if zoomed out to 1x or less\n if (this.zoomLevel <= 1) {\n this.panX = 0;\n this.panY = 0;\n }\n }\n }\n\n resetZoom() {\n this.zoomLevel = 1;\n this.panX = 0;\n this.panY = 0;\n }\n\n // Mouse events\n onMouseDown(event: MouseEvent) {\n if (this.zoomLevel <= 1) return;\n\n this.isDragging = true;\n this.startX = event.clientX - this.panX;\n this.startY = event.clientY - this.panY;\n event.preventDefault();\n }\n\n onMouseMove(event: MouseEvent) {\n if (!this.isDragging || this.zoomLevel <= 1) return;\n\n this.panX = event.clientX - this.startX;\n this.panY = event.clientY - this.startY;\n event.preventDefault();\n }\n\n onMouseUp(event: MouseEvent) {\n this.isDragging = false;\n }\n\n // Touch events for mobile\n onTouchStart(event: TouchEvent) {\n event.preventDefault();\n this.touches = Array.from(event.touches);\n\n if (this.touches.length === 1) {\n // Single touch - start dragging\n if (this.zoomLevel > 1) {\n this.isDragging = true;\n this.startX = this.touches[0].clientX - this.panX;\n this.startY = this.touches[0].clientY - this.panY;\n }\n } else if (this.touches.length === 2) {\n // Two touches - start pinch zoom\n this.isDragging = false;\n this.initialDistance = this.getDistance(this.touches[0], this.touches[1]);\n this.initialZoom = this.zoomLevel;\n }\n }\n\n onTouchMove(event: TouchEvent) {\n event.preventDefault();\n this.touches = Array.from(event.touches);\n\n if (this.touches.length === 1 && this.isDragging && this.zoomLevel > 1) {\n // Single touch - drag\n this.panX = this.touches[0].clientX - this.startX;\n this.panY = this.touches[0].clientY - this.startY;\n } else if (this.touches.length === 2) {\n // Two touches - pinch zoom\n const currentDistance = this.getDistance(this.touches[0], this.touches[1]);\n const scale = currentDistance / this.initialDistance;\n this.zoomLevel = Math.min(Math.max(this.initialZoom * scale, this.minZoom), this.maxZoom);\n\n // Reset pan if zoomed out to 1x or less\n if (this.zoomLevel <= 1) {\n this.panX = 0;\n this.panY = 0;\n }\n }\n }\n\n onTouchEnd(event: TouchEvent) {\n this.isDragging = false;\n this.touches = Array.from(event.touches);\n }\n\n // Mouse wheel zoom\n onWheel(event: WheelEvent) {\n event.preventDefault();\n\n const delta = event.deltaY > 0 ? -1 : 1;\n const zoomFactor = 1 + delta * 0.1;\n\n this.zoomLevel = Math.min(Math.max(this.zoomLevel * zoomFactor, this.minZoom), this.maxZoom);\n\n // Reset pan if zoomed out to 1x or less\n if (this.zoomLevel <= 1) {\n this.panX = 0;\n this.panY = 0;\n }\n }\n\n // Helper methods\n private getDistance(touch1: Touch, touch2: Touch): number {\n const dx = touch1.clientX - touch2.clientX;\n const dy = touch1.clientY - touch2.clientY;\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n // Keyboard shortcuts\n @HostListener('document:keydown', ['$event'])\n onKeyDown(event: KeyboardEvent) {\n if (!this.isPreviewOpen) return;\n\n switch (event.key) {\n case 'Escape':\n this.closePreview();\n break;\n case '+':\n case '=':\n event.preventDefault();\n this.zoomIn();\n break;\n case '-':\n event.preventDefault();\n this.zoomOut();\n break;\n case '0':\n event.preventDefault();\n this.resetZoom();\n break;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { IonProgressBar } from '@ionic/angular/standalone';\nimport { ProgressBarMetadata } from './types';\n\n@Component({\n selector: 'val-progress-bar',\n standalone: true,\n imports: [CommonModule, IonProgressBar],\n template: `\n <ion-progress-bar\n [ngClass]=\"[props.size]\"\n [class.rounded]=\"props.rounded\"\n [value]=\"props.progress\"\n [color]=\"props.color\"\n [buffer]=\"props.buffer\"\n [type]=\"props.type\"\n ></ion-progress-bar>\n `,\n styleUrls: ['./progress-bar.component.scss'],\n})\n/**\n * val-progress-bar\n *\n * A progress bar for indicating completion or loading state.\n *\n * @example\n * <val-progress-bar [props]=\"{ progress: 0.5, color: 'success', size: 'small' }\"></val-progress-bar>\n *\n * @input props: ProgressBarMetadata - Configuration for the progress bar (progress, color, size, etc.)\n */\nexport class ProgressBarComponent implements OnInit {\n /**\n * Progress bar configuration object.\n * @type {ProgressBarMetadata}\n * @property progress - The progress value (0 to 1).\n * @property size - The progress bar size ('small' | 'medium' | 'large' | 'xlarge').\n * @property color - The progress bar color (Ionic color string).\n * @property buffer - The buffer value for the bar.\n * @property type - The type of progress bar ('determinate' | 'indeterminate').\n * @property rounded - Whether the bar has rounded corners.\n */\n @Input()\n props: ProgressBarMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","import { Injectable } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\nexport interface LinkProcessorConfig {\n /** Whether to open external links in new tab (default: true) */\n openExternalInNewTab?: boolean;\n /** Whether to open internal links in new tab (default: false) */\n openInternalInNewTab?: boolean;\n /** Custom CSS classes for links */\n linkClass?: string;\n /** Custom CSS classes for external links */\n externalLinkClass?: string;\n /** Custom CSS classes for internal links */\n internalLinkClass?: string;\n /** Whether to process Markdown-style links [text](url) (default: true) */\n processMarkdownLinks?: boolean;\n}\n\n/**\n * LinkProcessorService - Service for processing text content to convert URLs and internal routes into clickable links.\n *\n * This service automatically detects external URLs (http/https), internal routes (starting with /),\n * and Markdown-style links [text](url) and converts them into HTML anchor elements with appropriate attributes.\n *\n * @example Basic usage:\n * ```typescript\n * constructor(private linkProcessor: LinkProcessorService) {}\n *\n * processText() {\n * const text = 'Visit https://example.com, go to /profile, or [check docs](https://docs.example.com)';\n * const processed = this.linkProcessor.processLinks(text);\n * // Returns SafeHtml with clickable links\n * }\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class LinkProcessorService {\n // Regex para detectar URLs completas (http/https) - captura toda la URL y luego limpiamos puntuación\n private readonly urlRegex = /(https?:\\/\\/[^\\s]+)/g;\n\n // Regex para detectar rutas internas - captura toda la ruta y luego limpiamos puntuación\n private readonly internalRouteRegex = /(\\s|^)(\\/[^\\s]*)/g;\n\n // Regex para detectar enlaces estilo Markdown [texto](url)\n private readonly markdownLinkRegex = /\\[([^\\]]+)\\]\\(([^)]+)\\)/g;\n\n constructor(private sanitizer: DomSanitizer) {}\n\n /**\n * Limpia la puntuación del final de una URL.\n * Mantiene caracteres válidos de URL pero remueve signos de puntuación comunes al final.\n * Preserva parámetros de consulta, fragmentos y caracteres válidos en URLs.\n */\n private cleanUrlPunctuation(url: string): string {\n // Caracteres que consideramos puntuación al final de oración, pero NO parte de URLs\n // No incluimos & o = que son parte de query params, ni # que es parte de fragmentos\n const trailingPunctuation = /[.,;!?)]+$/;\n\n // Casos especiales: si la URL termina con paréntesis pero no tiene paréntesis de apertura\n // probablemente el paréntesis no es parte de la URL\n const hasOpeningParen = url.includes('(');\n const endsWithClosingParen = url.endsWith(')');\n\n if (endsWithClosingParen && !hasOpeningParen) {\n // Remover el paréntesis de cierre si no hay uno de apertura\n url = url.replace(/\\)$/, '');\n }\n\n return url.replace(trailingPunctuation, '');\n }\n\n /**\n * Procesa texto para convertir enlaces en elementos <a> clickeables.\n * Detecta automáticamente URLs externas, rutas internas y enlaces estilo Markdown.\n *\n * @param text - Texto a procesar\n * @param config - Configuración del procesamiento\n * @returns SafeHtml con enlaces procesados o string original\n *\n * @example\n * ```typescript\n * const result = this.linkProcessor.processLinks(\n * 'Visit https://example.com, go to /profile, or [check docs](https://docs.example.com)',\n * {\n * openExternalInNewTab: true,\n * openInternalInNewTab: false,\n * processMarkdownLinks: true,\n * linkClass: 'custom-link'\n * }\n * );\n * ```\n */\n processLinks(text: string, config: LinkProcessorConfig = {}): SafeHtml | string {\n if (!text) return '';\n\n const {\n openExternalInNewTab = true,\n openInternalInNewTab = false,\n linkClass = 'processed-link',\n externalLinkClass = 'external-link',\n internalLinkClass = 'internal-link',\n processMarkdownLinks = true,\n } = config;\n\n let hasLinks = false;\n let processedText = text;\n\n // 1. Procesar enlaces estilo Markdown [texto](url) primero\n if (processMarkdownLinks) {\n const markdownMatches = Array.from(processedText.matchAll(this.markdownLinkRegex));\n\n // Procesar de atrás hacia adelante para mantener las posiciones\n for (let i = markdownMatches.length - 1; i >= 0; i--) {\n const match = markdownMatches[i];\n const [fullMatch, linkText, url] = match;\n const startIndex = match.index!;\n const endIndex = startIndex + fullMatch.length;\n\n hasLinks = true;\n const isExternal = /^https?:\\/\\//.test(url);\n const target = (isExternal ? openExternalInNewTab : openInternalInNewTab)\n ? isExternal\n ? ' target=\"_blank\" rel=\"noopener noreferrer\"'\n : ' target=\"_blank\"'\n : '';\n const typeClass = isExternal ? externalLinkClass : internalLinkClass;\n const classes = `${linkClass} ${typeClass}`.trim();\n const linkHtml = `<a href=\"${url}\"${target} class=\"${classes}\">${linkText}</a>`;\n\n processedText =\n processedText.substring(0, startIndex) + linkHtml + processedText.substring(endIndex);\n }\n }\n\n // 2. Procesar URLs externas directas\n const urlMatches = Array.from(processedText.matchAll(this.urlRegex));\n\n // Procesar de atrás hacia adelante para mantener las posiciones\n for (let i = urlMatches.length - 1; i >= 0; i--) {\n const match = urlMatches[i];\n const [fullMatch, url] = match;\n const startIndex = match.index!;\n const endIndex = startIndex + fullMatch.length;\n\n // Verificar que no esté ya dentro de un enlace HTML existente\n const textBefore = processedText.substring(0, startIndex);\n const lastOpenTag = textBefore.lastIndexOf('<a ');\n const lastCloseTag = textBefore.lastIndexOf('</a>');\n\n // Si hay un tag <a abierto sin cerrar, no procesamos\n if (lastOpenTag > lastCloseTag) {\n continue;\n }\n\n // Limpiar puntuación del final de la URL\n const cleanUrl = this.cleanUrlPunctuation(url);\n const punctuationRemoved = url !== cleanUrl;\n const punctuation = punctuationRemoved ? url.substring(cleanUrl.length) : '';\n\n hasLinks = true;\n const target = openExternalInNewTab ? ' target=\"_blank\" rel=\"noopener noreferrer\"' : '';\n const classes = `${linkClass} ${externalLinkClass}`.trim();\n const linkHtml = `<a href=\"${cleanUrl}\"${target} class=\"${classes}\">${cleanUrl}</a>`;\n\n // Reemplazar el URL original con el enlace + puntuación si existía\n const replacement = punctuationRemoved ? linkHtml + punctuation : linkHtml;\n processedText =\n processedText.substring(0, startIndex) + replacement + processedText.substring(endIndex);\n }\n\n // 3. Procesar rutas internas\n const internalMatches = Array.from(processedText.matchAll(this.internalRouteRegex));\n\n // Procesar de atrás hacia adelante para mantener las posiciones\n for (let i = internalMatches.length - 1; i >= 0; i--) {\n const match = internalMatches[i];\n const [fullMatch, prefix, route] = match;\n const startIndex = match.index!;\n const endIndex = startIndex + fullMatch.length;\n\n // Verificar que no esté ya dentro de un enlace HTML existente\n const textBefore = processedText.substring(0, startIndex);\n const lastOpenTag = textBefore.lastIndexOf('<a ');\n const lastCloseTag = textBefore.lastIndexOf('</a>');\n\n // Si hay un tag <a abierto sin cerrar, no procesamos\n if (lastOpenTag > lastCloseTag) {\n continue;\n }\n\n hasLinks = true;\n const target = openInternalInNewTab ? ' target=\"_blank\"' : '';\n const classes = `${linkClass} ${internalLinkClass}`.trim();\n const linkHtml = `<a href=\"${route}\"${target} class=\"${classes}\">${route}</a>`;\n\n const replacement = `${prefix}${linkHtml}`;\n processedText =\n processedText.substring(0, startIndex) + replacement + processedText.substring(endIndex);\n }\n\n // Si hay enlaces, sanitizar el HTML\n if (hasLinks) {\n return this.sanitizer.bypassSecurityTrustHtml(processedText);\n }\n\n return text;\n }\n\n /**\n * Detecta si un texto contiene enlaces (URLs, rutas internas o enlaces Markdown).\n *\n * @param text - Texto a analizar\n * @returns true si contiene enlaces\n *\n * @example\n * ```typescript\n * const hasLinks = this.linkProcessor.hasLinks('Visit https://example.com or [docs](https://docs.com)');\n * // Returns: true\n * ```\n */\n hasLinks(text: string): boolean {\n if (!text) return false;\n\n // Reset regex indices\n this.urlRegex.lastIndex = 0;\n this.internalRouteRegex.lastIndex = 0;\n this.markdownLinkRegex.lastIndex = 0;\n\n return (\n this.urlRegex.test(text) ||\n this.internalRouteRegex.test(text) ||\n this.markdownLinkRegex.test(text)\n );\n }\n\n /**\n * Extrae todos los enlaces de un texto.\n *\n * @param text - Texto a analizar\n * @returns Array de enlaces encontrados con su tipo y texto (si es Markdown)\n *\n * @example\n * ```typescript\n * const links = this.linkProcessor.extractLinks('Visit https://example.com, /profile, or [docs](https://docs.com)');\n * // Returns: [\n * // { url: 'https://example.com', type: 'external', text: 'https://example.com' },\n * // { url: '/profile', type: 'internal', text: '/profile' },\n * // { url: 'https://docs.com', type: 'external', text: 'docs' }\n * // ]\n * ```\n */\n extractLinks(text: string): Array<{ url: string; type: 'external' | 'internal'; text: string }> {\n if (!text) return [];\n\n const links: Array<{ url: string; type: 'external' | 'internal'; text: string }> = [];\n\n // Reset regex indices\n this.urlRegex.lastIndex = 0;\n this.internalRouteRegex.lastIndex = 0;\n this.markdownLinkRegex.lastIndex = 0;\n\n // Extraer enlaces Markdown primero\n let match;\n while ((match = this.markdownLinkRegex.exec(text)) !== null) {\n const url = match[2];\n const linkText = match[1];\n const type = /^https?:\\/\\//.test(url) ? 'external' : 'internal';\n links.push({ url, type, text: linkText });\n }\n\n // Extraer URLs externas directas\n while ((match = this.urlRegex.exec(text)) !== null) {\n const url = match[1];\n // Verificar que no esté ya capturado como Markdown link\n if (!links.some(link => link.url === url)) {\n links.push({ url, type: 'external', text: url });\n }\n }\n\n // Extraer rutas internas directas\n while ((match = this.internalRouteRegex.exec(text)) !== null) {\n const url = match[2];\n // Verificar que no esté ya capturado como Markdown link\n if (!links.some(link => link.url === url)) {\n links.push({ url, type: 'internal', text: url });\n }\n }\n\n return links;\n }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { LinkProcessorConfig, LinkProcessorService } from '../../services/link-processor.service';\n\n/**\n * ProcessLinksPipe - Pipe para procesar texto y convertir URLs en enlaces clickeables.\n *\n * Este pipe standalone detecta automáticamente URLs externas (http/https) y rutas internas\n * (que empiezan con /) y las convierte en elementos HTML anchor con los atributos apropiados.\n *\n * @example Uso básico:\n * ```html\n * <div [innerHTML]=\"'Visit https://example.com or go to /profile' | processLinks\"></div>\n * ```\n *\n * @example Con configuración personalizada:\n * ```html\n * <div [innerHTML]=\"text | processLinks:linkConfig\"></div>\n * ```\n *\n * @example En TypeScript:\n * ```typescript\n * export class MyComponent {\n * linkConfig: LinkProcessorConfig = {\n * openExternalInNewTab: true,\n * openInternalInNewTab: false,\n * linkClass: 'my-link',\n * externalLinkClass: 'external',\n * internalLinkClass: 'internal'\n * };\n * }\n * ```\n */\n@Pipe({\n name: 'processLinks',\n standalone: true,\n})\nexport class ProcessLinksPipe implements PipeTransform {\n private linkProcessor = inject(LinkProcessorService);\n\n /**\n * Transforma texto procesando URLs y rutas internas para convertirlas en enlaces.\n *\n * @param value - El texto a procesar\n * @param config - Configuración opcional para el procesamiento de enlaces\n * @returns SafeHtml con enlaces procesados o string original si no hay enlaces\n *\n * @example\n * ```html\n * <!-- Uso básico -->\n * <p [innerHTML]=\"'Check out https://angular.io' | processLinks\"></p>\n *\n * <!-- Con configuración -->\n * <p [innerHTML]=\"message | processLinks:{ openExternalInNewTab: false }\"></p>\n * ```\n */\n transform(value: string, config?: LinkProcessorConfig): SafeHtml | string {\n if (!value) {\n return '';\n }\n\n return this.linkProcessor.processLinks(value, config);\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { IonText } from '@ionic/angular/standalone';\nimport { Observable, of, Subscription } from 'rxjs';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { LinkProcessorService } from '../../../services/link-processor.service';\nimport { ProcessLinksPipe } from '../../../shared/pipes/process-links.pipe';\nimport { interpolateStaticContent, shouldUseReactiveContent } from '../../../shared/utils/simple-content';\nimport { TextContentConfig, TextMetadata } from './types';\n\n@Component({\n selector: 'val-text',\n standalone: true,\n imports: [IonText, AsyncPipe, ProcessLinksPipe],\n template: `\n <ion-text [color]=\"props.color\">\n @if (props.processLinks) {\n <p\n [class]=\"props.size\"\n [class.bold]=\"props.bold\"\n [innerHTML]=\"displayContent$ | async | processLinks: props.linkConfig\"\n ></p>\n } @else if (\n (props.allowPartialBold && (displayContent$ | async)?.includes('<b>')) ||\n (displayContent$ | async)?.includes('<strong>')\n ) {\n <p [class]=\"props.size\" [class.bold]=\"props.bold\" [innerHTML]=\"processPartialBold(displayContent$ | async)\"></p>\n } @else {\n <p [class]=\"props.size\" [class.bold]=\"props.bold\">{{ displayContent$ | async }}</p>\n }\n </ion-text>\n `,\n styleUrls: ['./text.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n/**\n * val-text\n *\n * Enhanced text component that supports both static content and reactive content from the language service.\n * The component automatically updates when the language changes if using reactive content.\n *\n * @example Static content:\n * ```html\n * <val-text [props]=\"{\n * content: 'Static text',\n * color: 'primary',\n * size: 'medium',\n * bold: false\n * }\"></val-text>\n * ```\n *\n * @example Reactive content:\n * ```html\n * <val-text [props]=\"{\n * contentKey: 'welcomeMessage',\n * contentClass: 'HomeComponent',\n * contentFallback: 'Welcome!',\n * color: 'primary',\n * size: 'large',\n * bold: true\n * }\"></val-text>\n * ```\n *\n * @example Reactive content with interpolation:\n * ```html\n * <val-text [props]=\"{\n * contentKey: 'greeting',\n * contentClass: 'UserComponent',\n * contentInterpolation: { name: 'John', count: 5 },\n * color: 'secondary',\n * size: 'medium',\n * bold: false\n * }\"></val-text>\n * ```\n *\n * @example With automatic link processing:\n * ```html\n * <val-text [props]=\"{\n * content: 'Visit https://example.com or go to /profile for more info',\n * processLinks: true,\n * linkConfig: {\n * openExternalInNewTab: true,\n * openInternalInNewTab: false,\n * linkClass: 'custom-link',\n * externalLinkClass: 'external',\n * internalLinkClass: 'internal'\n * },\n * color: 'primary',\n * size: 'medium'\n * }\"></val-text>\n * ```\n *\n * @example With partial bold support:\n * ```html\n * <val-text [props]=\"{\n * content: 'Hola <b>Victor</b>, cómo estás? También puedes usar <strong>strong</strong>',\n * allowPartialBold: true,\n * color: 'dark',\n * size: 'medium',\n * bold: false\n * }\"></val-text>\n * ```\n *\n * @example Reactive content with partial bold:\n * ```html\n * <val-text [props]=\"{\n * contentKey: 'welcomeWithName',\n * contentClass: 'UserComponent',\n * contentInterpolation: { name: '<b>Juan</b>' },\n * allowPartialBold: true,\n * color: 'primary',\n * size: 'large',\n * bold: false\n * }\"></val-text>\n * ```\n *\n * @example Using ContentService helper:\n * ```typescript\n * // In component\n * content = inject(ContentService);\n * componentContent = this.content.forComponent('MyComponent');\n *\n * textProps = {\n * content: this.componentContent.getText('title'), // sync\n * color: 'primary',\n * size: 'large',\n * bold: true\n * };\n * // Or with reactive binding:\n * title$ = this.componentContent.get('title');\n * ```\n *\n * @input props: TextMetadata - Configuration for the text (content, styling, and reactive content options)\n */\nexport class TextComponent implements OnInit, OnDestroy {\n /**\n * Text configuration object.\n * @type {TextMetadata}\n *\n * For static content:\n * @property content - The text to display (takes precedence over reactive content)\n *\n * For reactive content:\n * @property contentKey - The content key to retrieve from language service\n * @property contentClass - The component class name for content lookup\n * @property contentFallback - Optional fallback text if content is not found\n * @property contentInterpolation - Optional values to interpolate into content\n *\n * For styling:\n * @property color - The text color (Ionic color string)\n * @property size - The text size ('small' | 'medium' | 'large' | 'xlarge')\n * @property bold - Whether the text is bold\n * @property processLinks - Whether to automatically process and convert links in text (default: false)\n * @property linkConfig - Configuration for link processing (colors, target behavior, etc.)\n * @property allowPartialBold - Whether to allow partial bold using <b> or <strong> tags (default: false)\n */\n @Input()\n props: TextMetadata;\n\n /**\n * Observable that provides the content to display.\n * This will be either static content or reactive content from the language service.\n */\n displayContent$: Observable<string>;\n\n private subscription = new Subscription();\n\n constructor(\n private langService: LangService,\n private linkProcessor: LinkProcessorService\n ) {}\n\n ngOnInit() {\n this.setupDisplayContent();\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n /**\n * Set up the content observable based on the props configuration.\n * Priority: static content > reactive content with interpolation > reactive content\n */\n private setupDisplayContent(): void {\n if (this.props.content) {\n // Static content takes precedence\n if (this.props.contentInterpolation) {\n // Static content with interpolation\n const interpolatedContent = interpolateStaticContent(this.props.content, this.props.contentInterpolation);\n this.displayContent$ = of(interpolatedContent);\n } else {\n // Simple static content\n this.displayContent$ = of(this.props.content);\n }\n } else if (shouldUseReactiveContent(this.props)) {\n // Reactive content from language service\n if (this.props.contentInterpolation) {\n // With interpolation\n this.displayContent$ = this.langService.getContentWithInterpolation(\n this.props.contentClass!,\n this.props.contentKey!,\n this.props.contentInterpolation,\n this.props.contentFallback\n );\n } else {\n // Simple reactive content\n this.displayContent$ = this.langService.getContent(\n this.props.contentClass!,\n this.props.contentKey!,\n this.props.contentFallback\n );\n }\n } else {\n // Fallback to empty string if no valid content configuration\n console.warn(\n 'val-text: No valid content configuration provided. Use either \"content\" for static text or \"contentKey\" + \"contentClass\" for reactive content.'\n );\n this.displayContent$ = of(this.props.contentFallback || '');\n }\n }\n\n /**\n * Process partial bold tags in the content.\n * Converts <b> and <strong> tags to properly styled bold spans.\n *\n * @param content - The content string to process\n * @returns Processed content with bold styling\n */\n processPartialBold(content: string | null): string {\n if (!content) return '';\n\n // Process <b> tags\n let processedContent = content.replace(/<b>(.*?)<\\/b>/gi, '<span class=\"partial-bold\">$1</span>');\n\n // Process <strong> tags\n processedContent = processedContent.replace(/<strong>(.*?)<\\/strong>/gi, '<span class=\"partial-bold\">$1</span>');\n\n return processedContent;\n }\n}\n\n/**\n * Helper function to create reactive text props from content configuration.\n * This provides a convenient way to create val-text props with reactive content.\n *\n * @param contentConfig - Content configuration\n * @param styleConfig - Optional style configuration\n * @returns Partial TextMetadata with content properties set\n *\n * @example\n * ```typescript\n * // In component\n * titleProps: TextMetadata = {\n * ...createTextProps({\n * contentKey: 'title',\n * contentClass: 'HeaderComponent'\n * }, {\n * color: 'primary',\n * size: 'large',\n * bold: true\n * })\n * };\n * ```\n *\n * @example With partial bold support:\n * ```typescript\n * // In component\n * greetingProps: TextMetadata = {\n * ...createTextProps({\n * contentKey: 'greeting',\n * contentClass: 'UserComponent',\n * contentInterpolation: { name: '<b>Juan</b>' }\n * }, {\n * color: 'primary',\n * size: 'medium',\n * bold: false,\n * allowPartialBold: true\n * })\n * };\n * ```\n */\nexport function createTextProps(\n contentConfig: TextContentConfig,\n styleConfig: Partial<Pick<TextMetadata, 'color' | 'size' | 'bold' | 'allowPartialBold'>> = {}\n): Partial<TextMetadata> {\n return {\n contentKey: contentConfig.contentKey,\n contentClass: contentConfig.contentClass,\n contentFallback: contentConfig.contentFallback,\n contentInterpolation: contentConfig.contentInterpolation,\n color: styleConfig.color || 'dark',\n size: styleConfig.size || 'medium',\n bold: styleConfig.bold || false,\n allowPartialBold: styleConfig.allowPartialBold || false,\n };\n}\n","import { AsyncPipe, CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n inject,\n} from '@angular/core';\nimport { IonText } from '@ionic/angular/standalone';\nimport { Observable, of } from 'rxjs';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { extractContentConfig, shouldUseReactiveContent } from '../../../shared/utils/simple-content';\nimport { TitleMetadata } from './types';\n\n@Component({\n selector: 'val-title',\n standalone: true,\n imports: [CommonModule, IonText, AsyncPipe],\n template: `\n <ion-text [color]=\"props.color\">\n @if (!props.bold) {\n <p [ngClass]=\"[props.size]\" [class.thin]=\"props.thin\">\n {{ displayContent$ | async }}\n </p>\n } @else {\n <b>\n <p [class]=\"props.size\">\n {{ displayContent$ | async }}\n </p>\n </b>\n }\n </ion-text>\n `,\n styleUrls: ['./title.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n/**\n * val-title\n *\n * A styled title or heading, with options for size, color, and boldness.\n * Supports both static content and reactive content from the language service.\n *\n * @example Static content:\n * ```html\n * <val-title [props]=\"{ content: 'My Title', size: 'large', color: 'primary', bold: true }\"></val-title>\n * ```\n *\n * @example Reactive content:\n * ```html\n * <val-title [props]=\"{\n * contentConfig: { key: 'pageTitle', fallback: 'Default Title' },\n * size: 'large',\n * color: 'primary',\n * bold: true\n * }\"></val-title>\n * ```\n *\n * @example Reactive content with interpolation:\n * ```html\n * <val-title [props]=\"{\n * contentConfig: {\n * key: 'welcomeTitle',\n * interpolation: { name: 'John' },\n * fallback: 'Welcome!'\n * },\n * size: 'large',\n * color: 'primary',\n * bold: true\n * }\"></val-title>\n * ```\n *\n * @input props: TitleMetadata - Configuration for the title (content, color, size, bold, thin)\n */\nexport class TitleComponent implements OnInit, OnChanges {\n /**\n * Title configuration object.\n * @type {TitleMetadata}\n * @property content - Static title text (takes precedence over reactive content).\n * @property contentConfig - Reactive content configuration.\n * @property color - The title color (Ionic color string).\n * @property size - The title size ('small' | 'medium' | 'large' | 'xlarge').\n * @property bold - Whether the title is bold.\n * @property thin - Whether the title is thin (optional).\n */\n @Input()\n props: TitleMetadata;\n\n private langService = inject(LangService);\n private cdr = inject(ChangeDetectorRef);\n\n displayContent$: Observable<string>;\n\n constructor() {}\n\n ngOnInit() {\n this.updateContent();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n this.updateContent();\n this.cdr.detectChanges();\n }\n }\n\n private updateContent() {\n // Always convert to Observable for consistent template handling\n if (shouldUseReactiveContent(this.props)) {\n // Use reactive content with LangService\n const config = extractContentConfig(this.props);\n this.displayContent$ = this.langService.getContent(config.className, config.key, config.fallback);\n } else {\n // Convert static content to Observable\n const staticContent = this.props.content || '';\n this.displayContent$ = of(staticContent);\n }\n }\n}\n","import { Color } from '@ionic/core';\nimport { ReactiveTextMetadata } from '../../../shared/utils/simple-content';\n\n/**\n * Props for val-title component.\n * Supports both static content and reactive content from the language service.\n *\n * @property content - Static title text to display (takes precedence over reactive content).\n * @property contentKey - Content key for reactive content lookup.\n * @property contentClass - Component class name for content lookup.\n * @property contentFallback - Fallback text if content is not found.\n * @property color - The title color (Ionic color string).\n * @property size - The title size ('small' | 'medium' | 'large' | 'xlarge').\n * @property bold - Whether the title is bold.\n * @property thin - Whether the title is thin (optional).\n */\nexport interface TitleMetadata extends ReactiveTextMetadata {\n size: 'small' | 'medium' | 'large' | 'xlarge';\n color: Color;\n bold: boolean;\n thin?: boolean;\n}\n\n/**\n * Factory function to create title props with reactive content support.\n *\n * @param styleConfig - Title styling configuration\n * @param contentConfig - Content configuration (static or reactive)\n * @returns Complete TitleMetadata object\n *\n * @example Static content:\n * ```typescript\n * const props = createTitleProps(\n * { size: 'large', color: 'primary', bold: true },\n * { content: 'Static Title' }\n * );\n * ```\n *\n * @example Reactive content:\n * ```typescript\n * const props = createTitleProps(\n * { size: 'large', color: 'primary', bold: true },\n * {\n * contentKey: 'pageTitle',\n * contentClass: 'MyComponent',\n * contentFallback: 'Default Title'\n * }\n * );\n * ```\n */\nexport function createTitleProps(\n styleConfig: Pick<TitleMetadata, 'size' | 'color' | 'bold' | 'thin'>,\n contentConfig: Pick<TitleMetadata, 'content' | 'contentKey' | 'contentClass' | 'contentFallback'>\n): TitleMetadata {\n return {\n ...styleConfig,\n ...contentConfig,\n };\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { BoxComponent } from '../../atoms/box/box.component';\nimport { IconComponent } from '../../atoms/icon/icon.component';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { AlertBoxMetadata, ReactiveAlertBoxMetadata } from './types';\n\n@Component({\n selector: 'val-alert-box',\n standalone: true,\n imports: [CommonModule, BoxComponent, IconComponent, TextComponent],\n template: `\n <val-box [props]=\"props.box\">\n <div class=\"content-container\" body>\n <val-icon [props]=\"props.icon\"></val-icon>\n <!-- Support both legacy and reactive patterns -->\n @if (isLegacyProps) {\n <val-text class=\"text\" [props]=\"getLegacyTextProps()\" />\n } @else {\n <val-text class=\"text\" [props]=\"computedTextProps\" />\n }\n </div>\n </val-box>\n `,\n styleUrls: ['./alert-box.component.scss'],\n})\n/**\n * val-alert-box\n *\n * Displays an alert box with an icon and text, using a styled box container.\n * Supports both static and reactive content patterns.\n *\n * @example\n * // Legacy pattern with TextMetadata\n * <val-alert-box [props]=\"{ box: {...}, icon: {...}, text: {...} }\"></val-alert-box>\n *\n * // Reactive pattern with simplified configuration\n * <val-alert-box [props]=\"{ box: {...}, icon: {...}, textConfig: { key: 'alert.warning' } }\"></val-alert-box>\n *\n * @input props: AlertBoxMetadata | ReactiveAlertBoxMetadata - Configuration for the alert box\n */\nexport class AlertBoxComponent implements OnInit, OnDestroy {\n private subscriptions = new Subscription();\n\n /**\n * Alert box configuration object.\n * Supports both legacy AlertBoxMetadata and ReactiveAlertBoxMetadata patterns.\n */\n @Input()\n props: AlertBoxMetadata | ReactiveAlertBoxMetadata;\n\n /** Computed text properties for reactive pattern */\n computedTextProps: any;\n\n /** Whether this is using the legacy props pattern */\n get isLegacyProps(): boolean {\n return 'text' in this.props && typeof (this.props as any).text === 'object';\n }\n\n /** Get text props for legacy pattern */\n getLegacyTextProps(): any {\n return (this.props as AlertBoxMetadata).text;\n }\n\n constructor(private langService: LangService) {}\n\n ngOnInit() {\n if (!this.isLegacyProps) {\n this.initializeReactiveTextProps();\n }\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n\n private initializeReactiveTextProps() {\n const reactiveProps = this.props as ReactiveAlertBoxMetadata;\n\n // Base text properties with styling\n this.computedTextProps = {\n size: reactiveProps.textStyle?.size || 'medium',\n color: reactiveProps.textStyle?.color,\n bold: reactiveProps.textStyle?.bold || false,\n };\n\n // Add content configuration\n if (reactiveProps.text !== undefined) {\n // Static text\n this.computedTextProps.content = reactiveProps.text;\n } else if (reactiveProps.textConfig) {\n // Reactive content\n this.computedTextProps.contentConfig = reactiveProps.textConfig;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { ButtonGroupMetadata } from './types';\n\n@Component({\n selector: 'val-button-group',\n standalone: true,\n imports: [CommonModule, ButtonComponent],\n template: `\n <div [ngClass]=\"['group-container', Position]\" [class.column]=\"props.columned\" style=\"width: 100%;\">\n <val-button\n *ngFor=\"let b of props.buttons\"\n [props]=\"b\"\n (onClick)=\"clickHandler(b?.token)\"\n [ngStyle]=\"{ width: props.buttons.length === 1 ? '100%' : 'auto' }\"\n ></val-button>\n </div>\n `,\n styleUrls: ['./button-group.component.scss'],\n})\n/**\n * val-button-group\n *\n * Displays a group of buttons with configurable layout and position.\n *\n * @example\n * <val-button-group [props]=\"{ buttons: [...], position: 'center', columned: false }\" (onClick)=\"handler($event)\"></val-button-group>\n *\n * @input props: ButtonGroupMetadata - Configuration for the button group (buttons, position, columned)\n * @output onClick - Emits the token of the clicked button\n */\nexport class ButtonGroupComponent implements OnInit {\n /**\n * Button group configuration object.\n * @type {ButtonGroupMetadata}\n * @property buttons - Array of button configurations.\n * @property position - Position of the button group ('center' | 'left' | 'right' | 'spaced').\n * @property columned - Whether the buttons are displayed in a column.\n */\n @Input()\n props: ButtonGroupMetadata;\n\n /**\n * Event emitted with the token of the clicked button.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor() {}\n\n ngOnInit() {}\n\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n\n get Position(): string {\n if (this.props.buttons.length === 1 && this.props.position === 'spaced') {\n return 'right';\n }\n\n return this.props.position;\n }\n}\n","import { ButtonMetadata, ToolbarAction } from '../../types';\n\nexport enum CardType {\n native = 'native',\n checker = 'checker',\n tappable = 'tappable',\n complex = 'complex',\n}\n\nexport interface CardClickEvent {\n section: CardSection;\n token?: string;\n}\n\nexport enum CardSection {\n headerLeft,\n headerRight,\n content,\n footer,\n footerExtra,\n}\n\nexport interface CardMetadata {\n token?: string;\n type: CardType;\n title?: string;\n overtitle?: string;\n content?: string;\n image?: string;\n footerActions: ButtonMetadata[];\n footerComplexActions: ToolbarAction[];\n leftActions: ToolbarAction[];\n rightActions: ToolbarAction[];\n selected: boolean;\n headerText?: string;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport {\n IonButton,\n IonButtons,\n IonCard,\n IonCardContent,\n IonCardHeader,\n IonCardSubtitle,\n IonCardTitle,\n IonCheckbox,\n IonIcon,\n} from '@ionic/angular/standalone';\nimport { AvatarComponent } from '../../atoms/avatar/avatar.component';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { ImageComponent } from '../../atoms/image/image.component';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { ToolbarActionType } from '../../types';\nimport { CardClickEvent, CardMetadata, CardSection, CardType } from './types';\n\n@Component({\n selector: 'val-card',\n standalone: true,\n imports: [\n CommonModule,\n ButtonComponent,\n AvatarComponent,\n ImageComponent,\n TextComponent,\n IonCard,\n IonCardContent,\n IonCardHeader,\n IonCardTitle,\n IonCardSubtitle,\n IonCheckbox,\n IonButtons,\n IonButton,\n IonIcon,\n ],\n template: `\n <ion-card *ngIf=\"props.type === types.native\">\n <img alt=\"image\" [src]=\"props.image\" />\n <ion-card-header *ngIf=\"props.title || props.overtitle\">\n <ion-card-title *ngIf=\"props.title\">{{ props.title }}</ion-card-title>\n <ion-card-subtitle *ngIf=\"props.overtitle\">{{ props.overtitle }}</ion-card-subtitle>\n </ion-card-header>\n\n <ion-card-content *ngIf=\"props.content\">{{ props.content }}</ion-card-content>\n\n <val-button\n *ngFor=\"let b of props.footerActions\"\n [props]=\"b\"\n (onClick)=\"clickHandler(sections.footer, b.token)\"\n ></val-button>\n </ion-card>\n\n <ion-card\n *ngIf=\"props.type === types.tappable\"\n (click)=\"clickHandler(sections.content, props.token)\"\n class=\"tapable\"\n >\n <img alt=\"image\" [src]=\"props.image\" />\n <ion-card-header *ngIf=\"props.title || props.overtitle\">\n <ion-card-title *ngIf=\"props.title\">{{ props.title }}</ion-card-title>\n <ion-card-subtitle *ngIf=\"props.overtitle\">{{ props.overtitle }}</ion-card-subtitle>\n </ion-card-header>\n\n <ion-card-content *ngIf=\"props.content\">{{ props.content }}</ion-card-content>\n </ion-card>\n\n <ion-card\n *ngIf=\"props.type === types.checker\"\n (click)=\"clickHandler(sections.content, props.token)\"\n class=\"tapable\"\n >\n <ion-card-header *ngIf=\"props.title || props.overtitle\" class=\"checker\">\n <div>\n <ion-card-subtitle *ngIf=\"props.overtitle\">{{ props.overtitle }}</ion-card-subtitle>\n <ion-card-title *ngIf=\"props.title\">{{ props.title }}</ion-card-title>\n </div>\n <div>\n <ion-checkbox [checked]=\"props.selected\"></ion-checkbox>\n </div>\n </ion-card-header>\n\n <ion-card-content *ngIf=\"props.content\">{{ props.content }}</ion-card-content>\n </ion-card>\n\n <ion-card *ngIf=\"props.type === types.complex\" class=\"complex\">\n <ion-card-header class=\"complex-header\">\n <ion-buttons style=\"display: flex; align-items: center\" *ngIf=\"props.leftActions.length > 0\">\n <ng-container *ngFor=\"let action of props.leftActions\">\n <ion-button\n *ngIf=\"action.type === actionTypes.ICON\"\n (click)=\"clickHandler(sections.headerLeft, action.token)\"\n >\n <ion-icon slot=\"icon-only\" [name]=\"action.description\" color=\"dark\"></ion-icon>\n </ion-button>\n <val-avatar\n style=\"margin-right: 4px; cursor: pointer\"\n *ngIf=\"action.type === actionTypes.AVATAR\"\n [props]=\"{ size: 'small', image: action.description, default: '' }\"\n (onClick)=\"clickHandler(sections.headerLeft, action.token)\"\n ></val-avatar>\n <val-image\n *ngIf=\"action.type === actionTypes.IMAGE\"\n [props]=\"action.image\"\n (click)=\"clickHandler(sections.headerLeft, action.token)\"\n ></val-image>\n <ion-button\n *ngIf=\"action.type === actionTypes.BUTTON\"\n (click)=\"clickHandler(sections.headerLeft, action.token)\"\n >\n {{ action.description }}\n </ion-button>\n <div *ngIf=\"props.headerText\">\n <val-text [props]=\"{ content: props.headerText, color: 'dark', bold: true, size: 'medium' }\" />\n </div>\n </ng-container>\n </ion-buttons>\n <ion-buttons style=\"display: flex; align-items: center\" *ngIf=\"props.rightActions.length > 0\">\n <ng-container *ngFor=\"let action of props.rightActions\">\n <ion-button\n *ngIf=\"action.type === actionTypes.ICON\"\n (click)=\"clickHandler(sections.headerRight, action.token)\"\n >\n <ion-icon slot=\"icon-only\" [name]=\"action.description\" color=\"dark\"></ion-icon>\n </ion-button>\n <val-avatar\n style=\"margin-right: 4px; cursor: pointer\"\n *ngIf=\"action.type === actionTypes.AVATAR\"\n [props]=\"{ size: 'small', image: action.description, default: '' }\"\n (onClick)=\"clickHandler(sections.headerRight, action.token)\"\n ></val-avatar>\n <val-image\n *ngIf=\"action.type === actionTypes.IMAGE\"\n [props]=\"action.image\"\n (click)=\"clickHandler(sections.headerRight, action.token)\"\n ></val-image>\n <ion-button\n *ngIf=\"action.type === actionTypes.BUTTON\"\n (click)=\"clickHandler(sections.headerRight, action.token)\"\n >\n {{ action.description }}\n </ion-button>\n </ng-container>\n </ion-buttons>\n </ion-card-header>\n\n <div class=\"tapable\" (click)=\"clickHandler(sections.content, props.token)\">\n <ion-card-header *ngIf=\"props.title || props.overtitle\" class=\"complex-header\">\n <div>\n <ion-card-subtitle *ngIf=\"props.overtitle\">{{ props.overtitle }}</ion-card-subtitle>\n <ion-card-title *ngIf=\"props.title\">{{ props.title }}</ion-card-title>\n </div>\n </ion-card-header>\n\n <img alt=\"image\" [src]=\"props.image\" />\n <ion-card-content *ngIf=\"props.content\" class=\"complex-content\">{{ props.content }}</ion-card-content>\n </div>\n <val-button\n *ngFor=\"let b of props.footerActions\"\n [props]=\"b\"\n (onClick)=\"clickHandler(sections.footer, b.token)\"\n ></val-button>\n <ion-buttons\n style=\"display: flex; align-items: center; justify-content: flex-end; margin: 8px\"\n *ngIf=\"props.footerComplexActions.length > 0\"\n >\n <ng-container *ngFor=\"let action of props.footerComplexActions\">\n <ion-button\n *ngIf=\"action.type === actionTypes.ICON\"\n (click)=\"clickHandler(sections.footerExtra, action.token)\"\n >\n <ion-icon slot=\"icon-only\" [name]=\"action.description\" color=\"dark\"></ion-icon>\n </ion-button>\n <val-avatar\n style=\"margin-right: 4px; cursor: pointer\"\n *ngIf=\"action.type === actionTypes.AVATAR\"\n [props]=\"{ size: 'small', image: action.description, default: '' }\"\n (onClick)=\"clickHandler(sections.footerExtra, action.token)\"\n ></val-avatar>\n <val-image\n *ngIf=\"action.type === actionTypes.IMAGE\"\n [props]=\"action.image\"\n (click)=\"clickHandler(sections.footerExtra, action.token)\"\n ></val-image>\n <ion-button\n *ngIf=\"action.type === actionTypes.BUTTON\"\n (click)=\"clickHandler(sections.footerExtra, action.token)\"\n color=\"dark\"\n >\n {{ action.description }}\n </ion-button>\n </ng-container>\n </ion-buttons>\n </ion-card>\n `,\n styleUrls: ['./card.component.scss'],\n})\n/**\n * val-card\n *\n * A flexible card component supporting images, titles, content, actions, and custom sections.\n *\n * @example\n * <val-card [props]=\"{ type: 'native', title: 'Card', image: 'url', content: '...', actions: [...] }\" (onClick)=\"handler($event)\"></val-card>\n *\n * @input props: CardMetadata - Configuration for the card (type, title, image, content, actions, etc.)\n * @output onClick - Emits a CardClickEvent when the card or an action is clicked\n */\nexport class CardComponent implements OnInit {\n /**\n * Card configuration object.\n * @type {CardMetadata}\n * @property type - The card type (see CardType).\n * @property title - The card title.\n * @property image - The card image URL.\n * @property content - The card content.\n * @property actions - Array of action buttons (optional).\n * @property sections - Custom card sections (optional).\n * @property overtitle - Subtitle or overtitle (optional).\n */\n @Input()\n props: CardMetadata;\n\n /**\n * Event emitted when the card or an action is clicked.\n */\n @Output()\n onClick = new EventEmitter<CardClickEvent>();\n\n types = CardType;\n actionTypes = ToolbarActionType;\n sections = CardSection;\n\n constructor() {}\n\n ngOnInit() {}\n\n clickHandler(section: CardSection, token?: string) {\n this.onClick.emit({ section, token });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\nimport { IonCheckbox } from '@ionic/angular/standalone';\n\n@Component({\n selector: 'val-check-input',\n standalone: true,\n imports: [CommonModule, IonCheckbox],\n template: ` <ion-checkbox>I agree to the terms and conditions</ion-checkbox> `,\n styleUrls: ['./check-input.component.scss'],\n})\n/**\n * val-check-input\n *\n * A simple checkbox input for boolean values or agreements.\n *\n * @example\n * <val-check-input></val-check-input>\n */\nexport class CheckInputComponent implements OnInit {\n constructor() {}\n\n ngOnInit() {}\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonCheckbox, IonTextarea } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-comment-input',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, IonCheckbox, IonTextarea],\n template: `\n <ion-textarea [formControl]=\"props.control\" [counter]=\"true\" [maxlength]=\"props.range.max\"></ion-textarea>\n `,\n styleUrls: ['./comment-input.component.scss'],\n})\n/**\n * val-comment-input\n *\n * A textarea input for multi-line comments, integrated with Angular forms.\n *\n * @example\n * <val-comment-input [props]=\"{ control: myControl, range: { max: 200 } }\"></val-comment-input>\n *\n * @input props: InputMetadata - Configuration for the textarea (form control, range, etc.)\n */\nexport class CommentInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the textarea.\n * @property range - The range object with max length.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { IonSpinner, IonText } from '@ionic/angular/standalone';\nimport { ContentLoaderMetadata } from './types';\n\n@Component({\n selector: 'val-content-loader',\n standalone: true,\n imports: [CommonModule, IonSpinner, IonText],\n template: `\n <div [ngClass]=\"['spinner-wrapper', props.size]\">\n <ion-spinner [ngClass]=\"[props.size]\" [name]=\"props.name\" [color]=\"props.color\"></ion-spinner>\n <ion-text [color]=\"props.color\">\n <p>{{ props.text }}</p>\n </ion-text>\n </div>\n `,\n styleUrls: ['./content-loader.component.scss'],\n})\n/**\n * val-content-loader\n *\n * A loading spinner with optional text, for indicating loading states.\n *\n * @example\n * <val-content-loader [props]=\"{ size: 'large', color: 'primary', text: 'Loading...' }\"></val-content-loader>\n *\n * @input props: ContentLoaderMetadata - Configuration for the loader (size, color, text, etc.)\n */\nexport class ContentLoaderComponent implements OnInit {\n /**\n * Loader configuration object.\n * @type {ContentLoaderMetadata}\n * @property size - The spinner size.\n * @property color - The spinner color.\n * @property text - The loading text (optional).\n * @property name - The spinner name (optional).\n */\n @Input()\n props: ContentLoaderMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","/**\n * Utilities for handling default values in form inputs based on InputMetadata configuration.\n */\n\nimport { InputMetadata, InputType } from '../../components/types';\n\n/**\n * Resolves the initial value for a form input based on its configuration.\n *\n * @param input - The input metadata configuration\n * @returns The resolved initial value\n *\n * @example\n * // Custom default value\n * const customValue = resolveInputDefaultValue({ withDefault: '2025-06-24', type: InputType.DATE });\n *\n * // Auto default value\n * const autoValue = resolveInputDefaultValue({ withDefault: true, type: InputType.NUMBER });\n *\n * // Explicit value (takes precedence)\n * const explicitValue = resolveInputDefaultValue({ value: 'explicit', withDefault: true, type: InputType.TEXT });\n */\nexport function resolveInputDefaultValue(input: InputMetadata): any {\n // Explicit value takes precedence\n if (input.value !== undefined && input.value !== null && input.value !== '') {\n return parseValueByType(input.value, input.type);\n }\n\n // No default configuration\n if (!input.withDefault) {\n return null;\n }\n\n // Custom default value\n if (typeof input.withDefault === 'string') {\n return parseValueByType(input.withDefault, input.type);\n }\n\n // Auto default value (withDefault === true)\n return getAutoDefaultValue(input.type);\n}\n\n/**\n * Parses a string value to the appropriate type based on the input type.\n *\n * @param value - The string value to parse\n * @param type - The input type\n * @returns The parsed value\n */\nfunction parseValueByType(value: string, type: InputType): any {\n switch (type) {\n case InputType.DATE:\n return new Date(value).toISOString();\n case InputType.NUMBER:\n return parseFloat(value) || 0;\n case InputType.CHECK:\n return value === 'true' || value === '1';\n case InputType.TEXT:\n case InputType.EMAIL:\n case InputType.PASSWORD:\n case InputType.COMMENT:\n case InputType.PIN_CODE:\n case InputType.HOUR:\n case InputType.RADIO:\n case InputType.SELECT:\n case InputType.SEARCH_SELECT:\n case InputType.FILE:\n default:\n return value;\n }\n}\n\n/**\n * Gets the automatic default value for a given input type.\n *\n * @param type - The input type\n * @returns The auto default value\n */\nfunction getAutoDefaultValue(type: InputType): any {\n switch (type) {\n case InputType.DATE:\n return new Date().toISOString();\n case InputType.NUMBER:\n return 0;\n case InputType.CHECK:\n return false;\n case InputType.TEXT:\n case InputType.EMAIL:\n case InputType.PASSWORD:\n case InputType.COMMENT:\n case InputType.PIN_CODE:\n case InputType.HOUR:\n case InputType.RADIO:\n case InputType.SELECT:\n case InputType.SEARCH_SELECT:\n case InputType.FILE:\n default:\n return '';\n }\n}\n\n/**\n * Applies the resolved default value to a FormControl.\n *\n * @param input - The input metadata configuration\n * @example\n * const input = { control: myFormControl, type: InputType.DATE, withDefault: true };\n * applyDefaultValueToControl(input);\n */\nexport function applyDefaultValueToControl(input: InputMetadata): void {\n if (!input.control) return;\n\n const defaultValue = resolveInputDefaultValue(input);\n if (defaultValue !== null) {\n input.control.setValue(defaultValue);\n input.control.markAsPristine();\n input.control.updateValueAndValidity();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonDatetime, IonDatetimeButton, IonModal } from '@ionic/angular/standalone';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-date-input',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, IonDatetime, IonDatetimeButton, IonModal],\n template: `\n <div class=\"button-container\">\n <ion-datetime-button class=\"action\" [datetime]=\"props.token\"></ion-datetime-button>\n </div>\n <ion-modal [keepContentsMounted]=\"true\">\n <ng-template>\n <ion-datetime\n [formControl]=\"props.control\"\n [id]=\"props.token\"\n presentation=\"date\"\n locale=\"es-ES\"\n [firstDayOfWeek]=\"1\"\n [showDefaultButtons]=\"true\"\n doneText=\"Aceptar\"\n cancelText=\"Cancelar\"\n formatOptions=\"{\n date: { dateStyle: 'medium' },\n time: { timeStyle: 'short' }\n }\"\n >\n <span slot=\"title\">{{ props.hint }}</span>\n </ion-datetime>\n </ng-template>\n </ion-modal>\n `,\n styleUrls: ['./date-input.component.scss'],\n})\n/**\n * val-date-input\n *\n * A date picker input integrated with Angular forms, using Ionic's datetime component.\n *\n * @example\n * <val-date-input [props]=\"{ control: myControl, hint: 'Select a date' }\"></val-date-input>\n *\n * @input props: InputMetadata - Configuration for the date input (form control, hint, etc.)\n */\nexport class DateInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the date input.\n * @property hint - The hint text for the input.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {\n // Apply default values on initialization\n if (this.props?.withDefault || this.props?.value) {\n applyDefaultValueToControl(this.props);\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonInput } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-email-input',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, IonInput],\n template: ` <ion-input [formControl]=\"props.control\" type=\"email\" [placeholder]=\"props.placeholder\"></ion-input> `,\n styleUrls: ['./email-input.component.scss'],\n})\n/**\n * val-email-input\n *\n * An email input field integrated with Angular forms.\n *\n * @example\n * <val-email-input [props]=\"{ control: myControl, placeholder: 'Enter your email' }\"></val-email-input>\n *\n * @input props: InputMetadata - Configuration for the input (form control, placeholder, etc.)\n */\nexport class EmailInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the input.\n * @property placeholder - The placeholder text.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","/**\n * Resolves a color string to a valid CSS value for use in styles.\n * Supports Ionic color names, CSS variables, and custom colors.\n *\n * @param color The color name, CSS variable, or custom color string\n * @returns A valid CSS color value\n *\n * @example\n * resolveColor('primary'); // returns 'var(--ion-color-primary)'\n * resolveColor('--my-custom-color'); // returns 'var(--my-custom-color)'\n * resolveColor('#ff0000'); // returns '#ff0000'\n */\nexport function resolveColor(color: string): string {\n // Si el color empieza con \"--\", se asume que es una variable CSS válida\n if (color.startsWith('--')) {\n return `var(${color})`;\n }\n\n // Lista de colores predefinidos de Ionic\n const ionicColors = [\n 'primary',\n 'secondary',\n 'tertiary',\n 'success',\n 'warning',\n 'danger',\n 'light',\n 'medium',\n 'dark',\n ];\n\n // Verificar si el color es un color de Ionic\n if (ionicColors.includes(color)) {\n return `var(--ion-color-${color})`;\n }\n\n // Si no es una variable CSS ni un color de Ionic, devolver el color tal cual\n return color;\n}\n","import { Component, inject, Input } from '@angular/core';\nimport { IonText } from '@ionic/angular/standalone';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { resolveColor } from '../../../shared/utils/styles';\nimport { ExpandableTextInput } from './types';\n\n@Component({\n selector: 'val-expandable-text',\n standalone: true,\n imports: [IonText],\n template: `\n <div class=\"description-container\" [class.expanded]=\"expanded\" [class.has-gradient]=\"!expanded && isTruncated\">\n <ion-text>\n <p class=\"description\">\n <span class=\"content\">{{ expanded ? props.content : truncatedText }}</span>\n @if (!expanded && isTruncated) {\n <span class=\"see-more\" [style.color]=\"this.color()\" (click)=\"toggleExpand()\">\n {{ getExpandText() }}\n </span>\n }\n </p>\n </ion-text>\n </div>\n `,\n styles: [\n `\n .description-container {\n position: relative;\n overflow: hidden;\n max-height: 10rem; /* Altura para texto truncado */\n transition: max-height 0.3s ease-in-out;\n }\n\n .description-container.expanded {\n max-height: none; /* Sin límite de altura al expandir */\n }\n\n .description {\n position: relative;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .description-container:not(.expanded) .description::after {\n content: '';\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 3.5rem; /* Altura del gradiente */\n background: linear-gradient(to top, var(--ion-background-color), rgba(255, 255, 255, 0));\n pointer-events: none; /* Ignorar interacciones en el gradiente */\n }\n\n .description-container:not(.has-gradient) .description::after {\n background: transparent; /* Fondo transparente si no hay gradiente */\n }\n\n .see-more {\n position: relative;\n font-weight: bold;\n cursor: pointer;\n z-index: 1;\n margin-left: 0.3rem;\n }\n `,\n ],\n})\n/**\n * val-expandable-text\n *\n * A text component that can be expanded/collapsed to show more or less content.\n *\n * @example\n * <val-expandable-text [props]=\"{ content: '...', limit: 180, color: 'primary', expandText: 'más' }\"></val-expandable-text>\n *\n * @input props: ExpandableTextInput - Configuration for the expandable text (content, limit, color, expandText)\n */\nexport class ExpandableTextComponent {\n /**\n * Expandable text configuration object.\n * @type {ExpandableTextInput}\n * @property content - The text content to display.\n * @property limit - The character limit before truncation.\n * @property color - The color for the \"see more\" link.\n * @property expandText - The text for the expand link (optional).\n */\n @Input() props: ExpandableTextInput;\n expanded = false;\n defaultColor = 'primary';\n\n private langService = inject(LangService);\n\n get truncatedText(): string {\n const maxLength = this.props.limit || 100; // Longitud por defecto\n return this.props.content?.length > maxLength ? this.props.content.slice(0, maxLength) + '...' : this.props.content;\n }\n\n get isTruncated(): boolean {\n return this.props.content?.length > (this.props.limit || 100);\n }\n\n getExpandText(): string {\n return this.props.expandText || this.langService.getText('_global', 'seeMore', 'ver más');\n }\n\n toggleExpand() {\n this.expanded = !this.expanded;\n }\n\n color() {\n return resolveColor(this.props.color || this.defaultColor);\n }\n}\n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { IonIcon } from '@ionic/angular/standalone';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { PrimarySolidDefaultRoundButton } from '../../atoms/button/factory';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { ButtonMetadata, InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-file-input',\n standalone: true,\n imports: [IonIcon, TextComponent, ButtonComponent],\n template: `\n <div class=\"file-container\">\n <input style=\"display: none\" type=\"file\" (change)=\"onFileSelected($event)\" #fileInput />\n <div class=\"name-container\">\n <ion-icon [name]=\"selectedFile ? 'checkmark-circle-outline' : 'alert-circle-outline'\"></ion-icon>\n <val-text\n style=\"margin-left: 4px;\"\n [props]=\"{\n content: selectedFile ? selectedFile.name : 'No has seleccionado archivo',\n color: 'dark',\n bold: false,\n size: 'medium',\n }\"\n ></val-text>\n </div>\n <val-button [props]=\"contrastButton\" (onClick)=\"fileInput.click()\"></val-button>\n </div>\n `,\n styleUrls: ['./file-input.component.scss'],\n})\n/**\n * val-file-input\n *\n * A file input component for uploading files, integrated with Angular forms.\n *\n * @example\n * <val-file-input [props]=\"{ control: myControl }\"></val-file-input>\n *\n * @input props: InputMetadata - Configuration for the file input (form control, etc.)\n */\nexport class FileInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the file input.\n */\n @Input() props: InputMetadata;\n\n @ViewChild('fileInput') fileInput;\n\n contrastButton: ButtonMetadata = {\n ...PrimarySolidDefaultRoundButton('Subir archivo'),\n color: 'light',\n };\n selectedFile: File;\n\n constructor() {}\n\n ngOnInit() {}\n\n onFileSelected(event): void {\n this.selectedFile = event.target.files[0];\n this.props.control.setValue(this.selectedFile);\n }\n\n reset(): void {\n this.selectedFile = null;\n this.fileInput.nativeElement.value = '';\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-hint',\n standalone: true,\n imports: [CommonModule, TextComponent],\n template: `\n <div class=\"hint-container\" *ngIf=\"shouldShowErrors\">\n <val-text\n *ngFor=\"let e of Errors\"\n [props]=\"{\n content: e,\n color: 'danger',\n bold: false,\n size: 'small',\n }\"\n ></val-text>\n </div>\n `,\n styleUrls: ['./hint.component.scss'],\n})\n/**\n * val-hint\n *\n * Displays validation error messages for a form input, using Angular forms.\n *\n * @example\n * <val-hint [props]=\"{ control: myControl, errors: { required: 'Required field' } }\"></val-hint>\n *\n * @input props: InputMetadata - Configuration for the input (form control, errors, etc.)\n */\nexport class HintComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the input.\n * @property errors - The error messages mapping.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n\n get shouldShowErrors(): boolean {\n if (this.props.control) {\n // Normal field with single control\n return this.props.control.invalid && (this.props.control.touched || this.props.control.dirty);\n } else if (this.props.fromControl && this.props.toControl) {\n // NUMBER_FROM_TO field with separate controls\n const fromInvalid =\n this.props.fromControl.invalid && (this.props.fromControl.touched || this.props.fromControl.dirty);\n const toInvalid = this.props.toControl.invalid && (this.props.toControl.touched || this.props.toControl.dirty);\n return fromInvalid || toInvalid;\n }\n return false;\n }\n\n get Errors(): string[] {\n const keys = Object.keys(this.props.errors || {});\n const errors = [];\n\n keys.map((e: string) => {\n if (this.props.control && this.props.control.hasError(e)) {\n // Normal field\n errors.push(this.props.errors[e]);\n } else if (this.props.fromControl && this.props.toControl) {\n // NUMBER_FROM_TO field - check both controls\n const fromLabel = this.props.fromLabel || 'Inicial';\n const toLabel = this.props.toLabel || 'Final';\n\n if (this.props.fromControl.hasError(e)) {\n errors.push(`${fromLabel}: ${this.props.errors[e]}`);\n }\n if (this.props.toControl.hasError(e)) {\n errors.push(`${toLabel}: ${this.props.errors[e]}`);\n }\n }\n });\n\n return errors;\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonDatetime } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-hour-input',\n standalone: true,\n imports: [ReactiveFormsModule, IonDatetime],\n template: ` <ion-datetime [formControl]=\"props.control\" presentation=\"time\"></ion-datetime>`,\n styleUrls: ['./hour-input.component.scss'],\n})\n/**\n * val-hour-input\n *\n * A time picker input integrated with Angular forms, using Ionic's datetime component.\n *\n * @example\n * <val-hour-input [props]=\"{ control: myControl }\"></val-hour-input>\n *\n * @input props: InputMetadata - Configuration for the time input (form control, etc.)\n */\nexport class HourInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the time input.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { IonButton, IonIcon, IonLabel, IonSelect, IonSelectOption } from '@ionic/angular/standalone';\nimport { addIcons } from 'ionicons';\nimport { chevronDown } from 'ionicons/icons';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { PopoverSelectorMetadata } from './types';\n\n@Component({\n selector: 'val-popover-selector',\n standalone: true,\n imports: [CommonModule, IonButton, IonIcon, IonSelect, IonSelectOption, IonLabel],\n template: `\n <div class=\"popover-selector-container\">\n <ion-label *ngIf=\"props.label\" class=\"selector-label\">{{ props.label }}</ion-label>\n <ion-select\n [value]=\"props.selectedValue\"\n [placeholder]=\"getPlaceholderText()\"\n [interface]=\"props.interface || 'popover'\"\n [multiple]=\"props.multiple || false\"\n [disabled]=\"props.disabled || false\"\n [cancelText]=\"getCancelText()\"\n [okText]=\"getOkText()\"\n (ionChange)=\"onSelectionChange($event)\"\n class=\"popover-selector-select\"\n >\n <ion-button\n slot=\"trigger\"\n [fill]=\"props.fill || 'clear'\"\n [size]=\"props.size || 'default'\"\n [shape]=\"'round'\"\n [color]=\"props.color || 'medium'\"\n [disabled]=\"props.disabled || false\"\n class=\"selector-trigger\"\n >\n <ion-icon *ngIf=\"props.icon\" [name]=\"props.icon\" slot=\"start\"> </ion-icon>\n\n <span class=\"trigger-text\">{{ getDisplayText() }}</span>\n\n <ion-icon name=\"chevron-down-outline\" slot=\"end\" class=\"chevron-icon\"> </ion-icon>\n </ion-button>\n\n <ion-select-option *ngFor=\"let option of props.options\" [value]=\"option.value\" [disabled]=\"option.disabled\">\n <div class=\"option-content\">\n <ion-icon *ngIf=\"option.icon\" [name]=\"option.icon\" class=\"option-icon\"> </ion-icon>\n <span>{{ option.label }}</span>\n </div>\n </ion-select-option>\n </ion-select>\n </div>\n `,\n styleUrls: ['./popover-selector.component.scss'],\n})\n/**\n * val-popover-selector\n *\n * A generic reusable popover selector component that can be used for any type of selection.\n * Provides a button trigger that opens a popover with selectable options.\n *\n * @example\n * // Basic usage\n * <val-popover-selector\n * [props]=\"selectorProps\"\n * (selectionChange)=\"onSelectionChange($event)\">\n * </val-popover-selector>\n *\n * @example\n * // With icon and custom styling\n * const selectorProps: PopoverSelectorMetadata = {\n * options: [\n * { value: 'option1', label: 'Option 1', icon: 'star' },\n * { value: 'option2', label: 'Option 2', icon: 'heart' }\n * ],\n * selectedValue: 'option1',\n * label: 'Choose option',\n * icon: 'settings',\n * color: 'primary',\n * size: 'large',\n * fill: 'solid'\n * };\n *\n * @input props: PopoverSelectorMetadata - Configuration for the selector\n * @output selectionChange: EventEmitter<string | string[]> - Emitted when selection changes\n */\nexport class PopoverSelectorComponent {\n /**\n * Popover selector configuration object.\n * @type {PopoverSelectorMetadata}\n */\n @Input()\n props: PopoverSelectorMetadata;\n\n /**\n * Event emitted when the selection changes.\n * Emits the selected value(s).\n */\n @Output()\n selectionChange = new EventEmitter<string | string[]>();\n\n private langService = inject(LangService);\n\n constructor() {\n // Register required icons\n addIcons({ chevronDown });\n }\n\n /**\n * Get reactive placeholder text.\n */\n getPlaceholderText(): string {\n return this.props.placeholder || this.langService.getText('_global', 'select', 'Seleccionar...');\n }\n\n /**\n * Get reactive cancel text.\n */\n getCancelText(): string {\n return this.props.cancelText || this.langService.getText('_global', 'cancel', 'Cancelar');\n }\n\n /**\n * Get reactive ok text.\n */\n getOkText(): string {\n return this.props.okText || this.langService.getText('_global', 'ok', 'Aceptar');\n }\n\n /**\n * Handle selection change from the ion-select.\n * @param event - The ion-select change event\n */\n onSelectionChange(event: any) {\n const selectedValue = event.detail.value;\n this.selectionChange.emit(selectedValue);\n }\n\n /**\n * Get the display text for the trigger button.\n * Shows the selected option's label or placeholder.\n * @returns The display text\n */\n getDisplayText(): string {\n if (!this.props.selectedValue) {\n return this.getPlaceholderText();\n }\n\n if (Array.isArray(this.props.selectedValue)) {\n // Multiple selection\n if (this.props.selectedValue.length === 0) {\n return this.getPlaceholderText();\n }\n if (this.props.selectedValue.length === 1) {\n const option = this.props.options.find(opt => opt.value === this.props.selectedValue[0]);\n return option?.label || this.props.selectedValue[0];\n }\n const selectedText = this.langService.getText('_global', 'selected', 'seleccionados');\n return `${this.props.selectedValue.length} ${selectedText}`;\n }\n\n // Single selection\n const selectedOption = this.props.options.find(opt => opt.value === this.props.selectedValue);\n return selectedOption?.label || this.props.selectedValue;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { addIcons } from 'ionicons';\nimport { globe, language } from 'ionicons/icons';\nimport { Observable, Subscription, combineLatest, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { LangOption } from '../../../services/lang-provider/types';\nimport { PopoverSelectorComponent } from '../popover-selector/popover-selector.component';\nimport { PopoverOption, PopoverSelectorMetadata } from '../popover-selector/types';\nimport { LanguageSelectorMetadata } from './types';\n\n@Component({\n selector: 'val-language-selector',\n standalone: true,\n imports: [CommonModule, PopoverSelectorComponent],\n template: `\n <val-popover-selector [props]=\"popoverProps\" (selectionChange)=\"onLanguageChange($event)\"> </val-popover-selector>\n `,\n styleUrls: ['./language-selector.component.scss'],\n})\n/**\n * val-language-selector\n *\n * A specialized language selector component that integrates with the LangService.\n * Uses the popover-selector component internally and provides language-specific functionality.\n *\n * @example\n * // Basic usage (auto-detects languages from LangService)\n * <val-language-selector\n * [props]=\"{ showLabel: true, showFlags: true }\">\n * </val-language-selector>\n *\n * @example\n * // Custom configuration\n * const languageProps: LanguageSelectorMetadata = {\n * showLabel: true,\n * label: 'Choose Language',\n * showFlags: true,\n * color: 'primary',\n * size: 'large',\n * fill: 'outline',\n * customLanguageNames: {\n * 'es': 'Español',\n * 'en': 'English',\n * 'fr': 'Français'\n * }\n * };\n *\n * @example\n * // With reactive content\n * const languageProps: LanguageSelectorMetadata = {\n * showLabel: true,\n * labelConfig: {\n * className: 'myComponent',\n * key: 'languageLabel',\n * fallback: 'Language'\n * },\n * color: 'tertiary'\n * };\n *\n * @input props: LanguageSelectorMetadata - Configuration for the language selector\n * @output languageChange: EventEmitter<string> - Emitted when language changes\n */\nexport class LanguageSelectorComponent implements OnInit, OnDestroy {\n /**\n * Language selector configuration object.\n * @type {LanguageSelectorMetadata}\n */\n @Input()\n props: LanguageSelectorMetadata = {};\n\n /**\n * Event emitted when the language selection changes.\n * Emits the selected language code.\n */\n @Output()\n languageChange = new EventEmitter<string>();\n\n /** Popover selector configuration */\n popoverProps: PopoverSelectorMetadata;\n\n /** Current language observable */\n currentLanguage$: Observable<LangOption>;\n\n /** Available languages observable */\n availableLanguages$: Observable<LangOption[]>;\n\n /** Label observable for reactive content */\n label$: Observable<string>;\n\n private subscriptions = new Subscription();\n\n /** Default language display names */\n private readonly defaultLanguageNames: Record<string, string> = {\n es: 'Español',\n en: 'English',\n fr: 'Français',\n de: 'Deutsch',\n pt: 'Português',\n it: 'Italiano',\n zh: '中文',\n ja: '日本語',\n ko: '한국어',\n ru: 'Русский',\n ar: 'العربية',\n };\n\n /** Default flag icons for languages */\n private readonly defaultLanguageFlags: Record<string, string> = {\n es: '🇪🇸',\n en: '🇺🇸',\n fr: '🇫🇷',\n de: '🇩🇪',\n pt: '🇵🇹',\n it: '🇮🇹',\n zh: '🇨🇳',\n ja: '🇯🇵',\n ko: '🇰🇷',\n ru: '🇷🇺',\n ar: '🇸🇦',\n };\n\n constructor(private langService: LangService) {\n // Register required icons\n addIcons({ language, globe });\n }\n\n ngOnInit() {\n this.initializeLanguageState();\n this.initializeLabel();\n this.initializePopoverProps();\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n\n private initializeLanguageState() {\n // Get current language and available languages from LangService\n this.currentLanguage$ = this.langService.currentLang$;\n this.availableLanguages$ = this.currentLanguage$.pipe(\n map(() => this.props.availableLanguages || this.langService.availableLangs)\n );\n }\n\n private initializeLabel() {\n // Initialize label observable based on configuration\n if (this.props.label !== undefined) {\n // Static label\n this.label$ = of(this.props.label);\n } else if (this.props.labelConfig) {\n // Reactive label\n this.label$ = this.langService.getContent(\n this.props.labelConfig.className || '_global',\n this.props.labelConfig.key,\n this.props.labelConfig.fallback || 'Language'\n );\n } else {\n // Default label from global content\n this.label$ = this.langService.getContent('_global', 'language', 'Idioma');\n }\n }\n\n private initializePopoverProps() {\n // Subscribe to language state changes and content changes to update popover props\n const languageSubscription = combineLatest([\n this.availableLanguages$,\n this.currentLanguage$,\n this.langService.currentLang$, // This will trigger updates when language changes\n ]).subscribe(([availableLanguages, currentLanguage]) => {\n this.updatePopoverProps(availableLanguages, currentLanguage);\n });\n this.subscriptions.add(languageSubscription);\n\n // Subscribe to label changes\n const labelSubscription = this.label$.subscribe(label => {\n if (this.popoverProps) {\n this.popoverProps = {\n ...this.popoverProps,\n label: this.props.showLabel !== false ? label : undefined,\n };\n }\n });\n this.subscriptions.add(labelSubscription);\n }\n\n private updatePopoverProps(availableLanguages: LangOption[], currentLanguage: LangOption) {\n // Convert language codes to popover options\n const options: PopoverOption[] = availableLanguages.map(lang => ({\n value: lang,\n label: this.getLanguageDisplayName(lang),\n icon: this.props.showFlags ? undefined : undefined, // We'll use text flags instead\n }));\n\n // Create popover configuration\n this.popoverProps = {\n options,\n selectedValue: currentLanguage,\n label: this.props.showLabel !== false ? '' : undefined, // Will be set by label subscription\n icon: 'language',\n placeholder: this.langService.getText('_global', 'selectLanguage', 'Seleccionar idioma...'),\n color: this.props.color || 'medium',\n size: this.props.size || 'default',\n fill: this.props.fill || 'outline',\n shape: this.props.shape,\n expand: this.props.expand,\n disabled: this.props.disabled || false,\n interface: 'popover',\n showCheckmark: true,\n multiple: false,\n cancelText: 'Cancelar',\n okText: 'Aceptar',\n };\n }\n\n private getLanguageDisplayName(languageCode: string): string {\n // Use custom names if provided\n if (this.props.customLanguageNames?.[languageCode]) {\n const customName = this.props.customLanguageNames[languageCode];\n const flag = this.props.showFlags ? this.defaultLanguageFlags[languageCode] : '';\n return flag ? `${flag} ${customName}` : customName;\n }\n\n // Use reactive content for translated language names\n // Note: This will use the current language since getLanguageDisplayName is called during subscription updates\n const translatedName = this.langService.getText('_global', `languageName_${languageCode}`);\n const flag = this.props.showFlags ? this.defaultLanguageFlags[languageCode] : '';\n\n if (translatedName && translatedName !== `languageName_${languageCode}`) {\n return flag ? `${flag} ${translatedName}` : translatedName;\n }\n\n // Fallback to default names, then to code\n const defaultName = this.defaultLanguageNames[languageCode] || languageCode.toUpperCase();\n return flag ? `${flag} ${defaultName}` : defaultName;\n }\n\n /**\n * Handle language selection change.\n * @param selectedLanguage - The selected language code(s)\n */\n onLanguageChange(selectedLanguage: string | string[]) {\n if (typeof selectedLanguage === 'string') {\n // Update the language service\n this.langService.setLang(selectedLanguage);\n\n // Emit the change event\n this.languageChange.emit(selectedLanguage);\n }\n }\n}\n","/**\n * Service for managing application themes (light, dark, auto).\n * Handles user preferences, system theme detection, and theme toggling.\n * Uses localStorage to persist the selected theme.\n */\n\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { THEME } from '../shared/constants/storage';\nimport { LocalStorageService } from './local-storage.service';\n\nexport enum ThemeOption {\n LIGHT = 'light',\n DARK = 'dark',\n AUTO = 'auto',\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThemeService {\n /**\n * Indicates if the light theme is active.\n */\n lightToggle = false;\n /**\n * Indicates if the dark theme is active.\n */\n darkToggle = false;\n /**\n * Indicates if the auto theme is active.\n */\n autoToggle = false;\n /**\n * The current selected theme option.\n */\n currentOption = ThemeOption.AUTO;\n /**\n * Enum with all available theme options.\n */\n themeOptions = ThemeOption;\n /**\n * Whether the system prefers dark mode.\n */\n prefersDark = false;\n /**\n * The default theme option.\n */\n default = ThemeOption.AUTO;\n /**\n * Observable for the current theme.\n */\n theme: BehaviorSubject<ThemeOption>;\n\n constructor() {\n const current = LocalStorageService.get<ThemeOption>(THEME);\n console.log('💡 ThemeConfig current::: ', current);\n this.theme = new BehaviorSubject<ThemeOption>(current || this.default);\n this.currentOption = this.Theme;\n console.log('💡 ThemeConfig this.currentOption::: ', this.currentOption);\n this.toggleUserPreference(this.currentOption);\n\n const prefersDarkQuery = window.matchMedia('(prefers-color-scheme: dark)');\n this.prefersDark = prefersDarkQuery.matches;\n this.handleAutoConfiguration();\n\n prefersDarkQuery.addEventListener('change', mediaQuery => {\n console.log('💡 ThemeConfig addEventListener change::: ', mediaQuery);\n this.prefersDark = mediaQuery.matches;\n this.handleAutoConfiguration();\n });\n }\n\n private handleAutoConfiguration() {\n if (this.prefersDark && this.currentOption === ThemeOption.AUTO) {\n console.log('💡 ThemeConfig prefersDark::: ', this.prefersDark);\n this.toggleUserPreference(ThemeOption.AUTO);\n }\n if (!this.prefersDark && this.currentOption === ThemeOption.AUTO) {\n console.log('💡 ThemeConfig prefersDark::: ', this.prefersDark);\n this.toggleUserPreference(ThemeOption.AUTO);\n }\n }\n\n private handleDarkPreference() {\n this.toggleTheme(ThemeOption.DARK, true);\n this.toggleTheme(ThemeOption.LIGHT, false);\n }\n\n private handleLightPreference() {\n this.toggleTheme(ThemeOption.LIGHT, true);\n this.toggleTheme(ThemeOption.DARK, false);\n }\n\n /**\n * Returns true if the system prefers dark mode.\n */\n get IsDark(): boolean {\n return this.prefersDark;\n }\n\n /**\n * Gets the current theme option.\n */\n get Theme(): ThemeOption {\n return this.theme.value;\n }\n\n /**\n * Sets the current theme option and persists it.\n */\n set Theme(theme: ThemeOption) {\n this.theme.next(theme);\n LocalStorageService.set<ThemeOption>(THEME, theme);\n }\n\n /**\n * Toggles a theme class on the document body.\n * @param name The theme name\n * @param shouldAdd Whether to add or remove the class\n */\n toggleTheme(name: string, shouldAdd: boolean) {\n console.log('toggleTheme::: ', name, shouldAdd);\n document.body.classList.toggle(name, shouldAdd);\n }\n\n /**\n * Sets the user theme preference and updates toggles and theme classes.\n * @param option The selected theme option\n */\n toggleUserPreference(option: ThemeOption) {\n this.currentOption = option;\n this.Theme = option;\n this.lightToggle = option === ThemeOption.LIGHT;\n this.darkToggle = option === ThemeOption.DARK;\n this.autoToggle = option === ThemeOption.AUTO;\n\n switch (option) {\n case ThemeOption.LIGHT:\n this.handleLightPreference();\n break;\n case ThemeOption.DARK:\n this.handleDarkPreference();\n break;\n case ThemeOption.AUTO:\n if (this.prefersDark) {\n this.handleDarkPreference();\n } else {\n this.handleLightPreference();\n }\n break;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { DisplayComponent } from '../../atoms/display/display.component';\nimport { TitleComponent } from '../../atoms/title/title.component';\nimport { TitleBlockMetada } from './types';\n\n@Component({\n selector: 'val-title-block',\n standalone: true,\n imports: [CommonModule, TitleComponent, DisplayComponent],\n template: `\n <div [ngClass]=\"['titles-container', props.position]\">\n <val-title\n *ngIf=\"props.aboveTitle\"\n [props]=\"{\n content: props.aboveTitle.content | uppercase,\n color: props.aboveTitle.color,\n bold: false,\n size: props.aboveTitle.size,\n }\"\n ></val-title>\n <val-display\n *ngIf=\"props.title\"\n [props]=\"{\n content: props.title.content,\n color: props.title.color,\n size: props.title.size,\n }\"\n ></val-display>\n <val-title\n style=\"margin-top: 16px;\"\n *ngIf=\"props.bellowTitle\"\n [props]=\"{\n content: props.bellowTitle.content,\n color: props.bellowTitle.color,\n bold: false,\n size: props.bellowTitle.size,\n thin: props.bellowTitle.thin,\n }\"\n ></val-title>\n </div>\n `,\n styleUrls: ['./title-block.component.scss'],\n})\n/**\n * val-title-block\n *\n * Displays a block of titles (above, main, below) with configurable styles and positions.\n *\n * @example\n * <val-title-block [props]=\"{ title: {...}, aboveTitle: {...}, bellowTitle: {...}, position: 'center' }\"></val-title-block>\n *\n * @input props: TitleBlockMetada - Configuration for the title block (title, aboveTitle, bellowTitle, position)\n */\nexport class TitleBlockComponent implements OnInit, OnChanges {\n @Input()\n props: TitleBlockMetada;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n // Forzar detección de cambios múltiple\n this.cdr.detectChanges();\n setTimeout(() => {\n this.cdr.detectChanges();\n }, 0);\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, Input } from '@angular/core';\nimport { ThemeService } from '../../../services/theme.service';\nimport { resolveColor } from '../../../shared/utils/styles';\nimport { ButtonGroupComponent } from '../button-group/button-group.component';\nimport { TitleBlockComponent } from '../title-block/title-block.component';\nimport { LayeredCardMetadata } from './types';\n\n@Component({\n selector: 'layered-card',\n standalone: true,\n imports: [CommonModule, ButtonGroupComponent, TitleBlockComponent],\n template: `\n <div\n class=\"fun-card\"\n [class.big-space]=\"props.bigSpace\"\n [class.hoverable]=\"props.hoverable\"\n [class.layered]=\"props.mode === 'layered'\"\n [class.poster]=\"props.mode === 'poster'\"\n [ngStyle]=\"{\n background: theme.IsDark ? 'var(--ion-background-color)' : color(props.background),\n minHeight: props.withMin ? '340px' : 'auto',\n }\"\n >\n @if (props.mode === 'poster') {\n <img\n class=\"poster-image\"\n [class.dark]=\"props.dark\"\n [class.with-opacity]=\"props.withOpacity\"\n alt=\"image\"\n [src]=\"props.image\"\n />\n }\n @if (props.mode === 'layered') {\n <img\n class=\"layer-image\"\n [class.dark]=\"props.dark\"\n [class.with-opacity]=\"props.withOpacity\"\n alt=\"image\"\n [src]=\"props.image\"\n />\n }\n\n <section>\n <val-title-block [props]=\"props.content\" />\n @if (props.actions) {\n <val-button-group style=\"display:block; margin-top: 16px;\" [props]=\"props.actions\" />\n }\n </section>\n </div>\n `,\n styleUrl: './layered-card.component.scss',\n})\nexport class LayeredCardComponent {\n theme = inject(ThemeService);\n\n @Input()\n props: LayeredCardMetadata;\n\n color(background) {\n if (!background) {\n return '';\n }\n return resolveColor(background);\n }\n}\n","import { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\nimport { IonButton, IonIcon, IonText } from '@ionic/angular/standalone';\nimport { addIcons } from 'ionicons';\nimport { chevronForwardOutline } from 'ionicons/icons';\nimport { NavigationService } from '../../../services/navigation.service';\nimport { LinkMetadata } from './types';\n\n@Component({\n selector: 'val-link',\n standalone: true,\n imports: [IonButton, IonIcon, IonText],\n template: `\n <div>\n <ion-button type=\"button\" [color]=\"props.color\" fill=\"clear\" [size]=\"props.size\" (click)=\"onClickHandler()\">\n <ion-icon slot=\"end\" name=\"chevron-forward-outline\"></ion-icon>\n <ion-text>{{ props.text }}</ion-text>\n </ion-button>\n </div>\n `,\n styleUrls: ['./link.component.scss'],\n})\n/**\n * val-link\n *\n * A stylized link button with navigation support for internal, in-app, or new tab links.\n *\n * @example\n * <val-link [props]=\"{ text: 'Go', color: 'primary', link: '/home', type: 'internal' }\" (onClick)=\"handler($event)\"></val-link>\n *\n * @input props: LinkMetadata - Configuration for the link (text, color, link, type, etc.)\n * @output onClick - Emits the token of the clicked link\n */\nexport class LinkComponent implements OnInit {\n /**\n * Link configuration object.\n * @type {LinkMetadata}\n * @property text - The link text.\n * @property color - The button color (Ionic color string).\n * @property link - The URL or route to navigate to.\n * @property type - The navigation type ('internal', 'browse', 'tab').\n * @property token - Optional token for event identification.\n * @property size - The button size (optional).\n */\n @Input()\n props: LinkMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n service = inject(NavigationService);\n\n constructor() {\n addIcons({ chevronForwardOutline });\n }\n\n ngOnInit() {}\n\n onClickHandler() {\n this.onClick.emit(this.props.token);\n\n switch (this.props.type) {\n case 'internal':\n this.service.navigateByUrl(this.props.link);\n break;\n case 'browse':\n this.service.navigateInApp(this.props.link);\n break;\n case 'tab':\n this.service.openInNewTab(this.props.link);\n break;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { HrefComponent } from '../../atoms/href/href.component';\nimport { TitleComponent } from '../../atoms/title/title.component';\nimport { LinkCakeMetadata } from './types';\n\n@Component({\n selector: 'val-links-cake',\n standalone: true,\n imports: [CommonModule, TitleComponent, HrefComponent],\n template: `\n <div>\n @if (props.title) {\n <div class=\"title\">\n <val-title [props]=\"{ content: props.title, color: 'dark', bold: false, size: props.size }\"></val-title>\n </div>\n }\n <div class=\"link\" *ngFor=\"let l of props.links\">\n <val-href [props]=\"l\"></val-href>\n </div>\n </div>\n `,\n styleUrls: ['./links-cake.component.scss'],\n})\n/**\n * val-links-cake\n *\n * Displays a list of links with an optional title, styled as a \"cake\" of links.\n *\n * @example\n * <val-links-cake [props]=\"{ title: 'Links', links: [...], size: 'medium' }\"></val-links-cake>\n *\n * @input props: LinkCakeMetadata - Configuration for the links cake (title, links, size)\n */\nexport class LinksCakeComponent implements OnInit {\n /**\n * Links cake configuration object.\n * @type {LinkCakeMetadata}\n * @property title - The title for the links section (optional).\n * @property links - Array of link configurations.\n * @property size - The size of the title and links.\n */\n @Input()\n props: LinkCakeMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { BoxComponent } from '../../atoms/box/box.component';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { NotesBoxMetadata } from './types';\n\n@Component({\n selector: 'val-notes-box',\n standalone: true,\n imports: [CommonModule, BoxComponent, TextComponent],\n template: `\n <val-box\n [props]=\"{\n icon: '',\n bordered: false,\n color: props.color,\n leftBorder: true,\n rounded: props.rounded,\n padding: props.padding,\n }\"\n >\n <div [ngClass]=\"['content-container', props.size]\" body>\n @if (props.prefix) {\n <val-text\n [props]=\"{ content: props.prefix, color: props.textColor, bold: true, size: props.size }\"\n ></val-text>\n }\n <val-text [props]=\"{ content: props.text, color: props.textColor, bold: false, size: props.size }\"></val-text>\n </div>\n </val-box>\n `,\n styleUrls: ['./notes-box.component.scss'],\n})\n/**\n * val-notes-box\n *\n * Displays a styled notes/info box with optional prefix and configurable color, size, and padding.\n *\n * @example\n * <val-notes-box [props]=\"{ text: 'Note', prefix: 'Info', color: 'primary', textColor: 'dark', size: 'medium', rounded: true, padding: '8px' }\"></val-notes-box>\n *\n * @input props: NotesBoxMetadata - Configuration for the notes box (text, prefix, color, textColor, size, rounded, padding)\n */\nexport class NotesBoxComponent implements OnInit {\n /**\n * Notes box configuration object.\n * @type {NotesBoxMetadata}\n * @property text - The main text content.\n * @property prefix - Optional prefix text (bold).\n * @property color - The background color of the box.\n * @property textColor - The color of the text.\n * @property size - The size of the text and box.\n * @property rounded - Whether the box has rounded corners.\n * @property padding - Custom padding for the box.\n */\n @Input()\n props: NotesBoxMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonInput } from '@ionic/angular/standalone';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-number-input',\n standalone: true,\n imports: [ReactiveFormsModule, IonInput],\n template: ` <ion-input [formControl]=\"props.control\" type=\"number\" [placeholder]=\"props.placeholder\"></ion-input> `,\n styleUrls: ['./number-input.component.scss'],\n})\n/**\n * val-number-input\n *\n * A number input field integrated with Angular forms.\n *\n * @example\n * <val-number-input [props]=\"{ control: myControl, placeholder: 'Enter a number' }\"></val-number-input>\n *\n * @input props: InputMetadata - Configuration for the input (form control, placeholder, etc.)\n */\nexport class NumberInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the input.\n * @property placeholder - The placeholder text.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {\n // Apply default values on initialization\n if (this.props?.withDefault || this.props?.value) {\n applyDefaultValueToControl(this.props);\n }\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { IonInput, IonLabel } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-number-from-to',\n standalone: true,\n imports: [ReactiveFormsModule, IonInput, IonLabel],\n template: `\n <div class=\"number-from-to-container\">\n <ion-label position=\"stacked\">{{ props.fromLabel || 'Inicial' }}</ion-label>\n <ion-input\n [formControl]=\"fromControl\"\n type=\"number\"\n [placeholder]=\"props.fromPlaceholder || props.placeholder\"\n [min]=\"props.range?.min\"\n [max]=\"props.range?.max\"\n >\n </ion-input>\n\n <ion-label position=\"stacked\">{{ props.toLabel || 'Final' }}</ion-label>\n <ion-input\n [formControl]=\"toControl\"\n type=\"number\"\n [placeholder]=\"props.toPlaceholder || props.placeholder\"\n [min]=\"props.range?.min\"\n [max]=\"props.range?.max\"\n >\n </ion-input>\n </div>\n `,\n styleUrls: ['./number-from-to.component.scss'],\n})\nexport class NumberFromToComponent implements OnInit {\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {\n // Apply default values if configured\n if (this.props?.withDefault || this.props?.value) {\n this.applyDefaultValues();\n }\n }\n\n private applyDefaultValues() {\n const defaultValue = this.resolveDefaultValue();\n if (defaultValue !== null) {\n if (typeof defaultValue === 'object' && defaultValue.from !== undefined) {\n this.fromControl?.setValue(defaultValue.from);\n this.toControl?.setValue(defaultValue.to);\n } else {\n // Si es un valor simple, aplicarlo a ambos controles\n this.fromControl?.setValue(defaultValue);\n this.toControl?.setValue(defaultValue);\n }\n this.fromControl?.markAsPristine();\n this.toControl?.markAsPristine();\n this.fromControl?.updateValueAndValidity();\n this.toControl?.updateValueAndValidity();\n }\n }\n\n private resolveDefaultValue(): any {\n // Explicit value takes precedence\n if (this.props.value !== undefined && this.props.value !== null && this.props.value !== '') {\n return this.parseValue(this.props.value);\n }\n\n // No default configuration\n if (!this.props.withDefault) {\n return null;\n }\n\n // Custom default value\n if (typeof this.props.withDefault === 'string') {\n return this.parseValue(this.props.withDefault);\n }\n\n // Auto default value (withDefault === true)\n return { from: 0, to: 0 };\n }\n\n private parseValue(value: string): any {\n try {\n // Try to parse as JSON first (for object values)\n return JSON.parse(value);\n } catch {\n // If not JSON, treat as number\n const numValue = parseFloat(value) || 0;\n return { from: numValue, to: numValue };\n }\n }\n\n get fromControl(): FormControl {\n return this.props.fromControl;\n }\n\n get toControl(): FormControl {\n return this.props.toControl;\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonButton, IonIcon, IonInput } from '@ionic/angular/standalone';\nimport { IconService } from '../../../services/icons.service';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-password-input',\n standalone: true,\n imports: [ReactiveFormsModule, IonInput, IonButton, IonIcon],\n template: `\n <div class=\"input-container\">\n <ion-input\n class=\"sign-in__input-password\"\n [formControl]=\"props.control\"\n [type]=\"hidePassword ? 'password' : 'text'\"\n [placeholder]=\"props.placeholder\"\n ></ion-input>\n <ion-button color=\"dark\" fill=\"clear\" (click)=\"hidePassword = !hidePassword\" size=\"small\">\n <ion-icon slot=\"icon-only\" [name]=\"hidePassword ? 'eye-off-outline' : 'eye-outline'\"></ion-icon>\n </ion-button>\n </div>\n `,\n styleUrls: ['./password-input.component.scss'],\n})\n/**\n * val-password-input\n *\n * A password input field with show/hide toggle, integrated with Angular forms.\n *\n * @example\n * <val-password-input [props]=\"{ control: myControl, placeholder: 'Enter password' }\"></val-password-input>\n *\n * @input props: InputMetadata - Configuration for the input (form control, placeholder, etc.)\n */\nexport class PasswordInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the input.\n * @property placeholder - The placeholder text.\n */\n @Input() props: InputMetadata;\n\n hidePassword = true;\n\n constructor(icon: IconService) {}\n\n ngOnInit() {}\n}\n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { NgOtpInputComponent, NgOtpInputConfig, NgOtpInputModule } from 'ng-otp-input';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-pin-input',\n standalone: true,\n imports: [NgOtpInputModule],\n template: `\n <div class=\"otp\">\n <ng-otp-input [formCtrl]=\"props.control\" [config]=\"otpInputConfig\"></ng-otp-input>\n </div>\n `,\n styleUrls: ['./pin-input.component.scss'],\n})\n/**\n * val-pin-input\n *\n * A PIN code input using ng-otp-input, integrated with Angular forms.\n *\n * @example\n * <val-pin-input [props]=\"{ control: myControl }\"></val-pin-input>\n *\n * @input props: InputMetadata - Configuration for the PIN input (form control, etc.)\n */\nexport class PinInputComponent implements OnInit {\n @ViewChild(NgOtpInputComponent, { static: false }) pinCode: NgOtpInputComponent | undefined;\n\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the PIN input.\n */\n @Input() props: InputMetadata;\n\n codeLength = 5;\n otpInputConfig: NgOtpInputConfig = {\n inputStyles: {\n 'font-size': '32px',\n width: '58px',\n height: '60px',\n },\n inputClass: 'otp-input-box',\n length: this.codeLength,\n allowNumbersOnly: true,\n };\n\n constructor() {}\n\n ngOnInit() {}\n\n reset() {\n if (this.pinCode) {\n this.pinCode.setValue('');\n }\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ProgressBarComponent } from '../../atoms/progress-bar/progress-bar.component';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { TitleBlockComponent } from '../title-block/title-block.component';\nimport { ProgressStatusMetadata } from './types';\n\n//TODO: support automatic or manual interval for messages. Include the interval number as a parameter.\n@Component({\n selector: 'val-progress-status',\n standalone: true,\n imports: [TitleBlockComponent, ProgressBarComponent, TextComponent],\n template: `\n <div class=\"status-container\">\n <div class=\"title-container\">\n <val-title-block\n [props]=\"{\n position: 'center',\n aboveTitle: props.titles.aboveTitle,\n title: props.titles.title,\n bellowTitle: props.titles.bellowTitle,\n }\"\n ></val-title-block>\n </div>\n <div class=\"progress-bar-container\">\n <val-progress-bar\n [props]=\"{\n progress: props.progress,\n size: 'xlarge',\n color: props.color,\n rounded: true,\n type: 'determinate',\n buffer: 1,\n }\"\n ></val-progress-bar>\n </div>\n <div class=\"subtitle-container\">\n <div class=\"subtitle\" [class.blink]=\"blinking\">\n <val-text [props]=\"{ content: Content, color: 'medium', bold: false, size: props.size }\"></val-text>\n </div>\n </div>\n </div>\n `,\n styleUrls: ['./progress-status.component.scss'],\n})\n/**\n * val-progress-status\n *\n * Displays a progress bar with status messages and titles, useful for multi-step or loading processes.\n *\n * @example\n * <val-progress-status [props]=\"{ progress: 0.5, color: 'primary', size: 'medium', titles: {...}, messages: [...] }\"></val-progress-status>\n *\n * @input props: ProgressStatusMetadata - Configuration for the progress status (progress, color, size, titles, messages)\n */\nexport class ProgressStatusComponent implements OnInit {\n /**\n * Progress status configuration object.\n * @type {ProgressStatusMetadata}\n * @property progress - The progress value (0 to 1).\n * @property color - The color of the progress bar.\n * @property size - The size of the text and bar.\n * @property titles - Title block configuration.\n * @property messages - Array of status messages.\n */\n @Input()\n props: ProgressStatusMetadata;\n\n currentIndex = 0;\n blinking = false;\n\n constructor() {}\n\n ngOnInit() {\n setInterval(() => {\n this.blinking = !this.blinking;\n }, 1000);\n\n setInterval(() => {\n this.getNextMessage();\n }, 9000);\n }\n\n get Content(): string {\n return this.props.messages[this.currentIndex];\n }\n\n getNextMessage(): void {\n this.currentIndex = (this.currentIndex + 1) % this.props.messages.length;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { BoxComponent } from '../../atoms/box/box.component';\nimport { HrefComponent } from '../../atoms/href/href.component';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { ButtonGroupComponent } from '../button-group/button-group.component';\nimport { PrompterMetadata } from './types';\n\n@Component({\n selector: 'val-prompter',\n standalone: true,\n imports: [CommonModule, BoxComponent, ButtonGroupComponent, TextComponent, HrefComponent],\n template: `\n <val-box\n class=\"teleprompter-container\"\n [props]=\"{ icon: '', bordered: props.bordered, color: props.color, leftBorder: false, padding: props.padding }\"\n (onClick)=\"clickHandler()\"\n >\n <div class=\"container\" [class.teleprompter-content]=\"props.teleprompter\" body>\n <div>\n <val-text\n [props]=\"{\n content: props.content,\n color: '',\n bold: true,\n size: props.size,\n }\"\n ></val-text>\n </div>\n @if (props.buttons || props.hrefs) {\n <div class=\"actions-container\">\n <val-button-group\n class=\"buttons-container\"\n [props]=\"{ buttons: props.buttons, position: 'right', columned: false }\"\n (onClick)=\"clickHandler($event)\"\n ></val-button-group>\n <val-href\n class=\"link\"\n *ngFor=\"let l of props.hrefs\"\n [props]=\"l\"\n (onClick)=\"clickHandler($event)\"\n ></val-href>\n </div>\n }\n </div>\n </val-box>\n `,\n styleUrls: ['./prompter.component.scss'],\n})\n/**\n * val-prompter\n *\n * Displays a prompt/info box with text, actions (buttons/links), and custom styles.\n *\n * @example\n * <val-prompter [props]=\"{ content: 'Message', buttons: [...], hrefs: [...], color: 'primary', size: 'medium' }\"></val-prompter>\n *\n * @input props: PrompterMetadata - Configuration for the prompter (content, buttons, hrefs, color, size, etc.)\n * @output onClick - Emits when an action is clicked\n */\nexport class PrompterComponent implements OnInit {\n /**\n * Prompter configuration object.\n * @type {PrompterMetadata}\n * @property content - The main text content.\n * @property buttons - Array of button configurations (optional).\n * @property hrefs - Array of link configurations (optional).\n * @property color - The background color of the box.\n * @property size - The size of the text and box.\n * @property bordered - Whether the box has a border.\n * @property padding - Custom padding for the box.\n * @property teleprompter - Whether to use teleprompter style (optional).\n */\n @Input()\n props: PrompterMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor() {}\n\n ngOnInit() {}\n\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n}\n","import { NgFor } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonRadio, IonRadioGroup } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-radio-input',\n standalone: true,\n imports: [NgFor, ReactiveFormsModule, IonRadioGroup, IonRadio],\n template: `\n <ion-radio-group [allowEmptySelection]=\"true\" [formControl]=\"props.control\">\n <ng-container *ngFor=\"let o of props.options\">\n <ion-radio [value]=\"o.id\">{{ o.name }}</ion-radio>\n <br />\n </ng-container>\n </ion-radio-group>\n `,\n styleUrls: ['./radio-input.component.scss'],\n})\n/**\n * val-radio-input\n *\n * A radio group input for selecting one option, integrated with Angular forms.\n *\n * @example\n * <val-radio-input [props]=\"{ control: myControl, options: [{ id: '1', name: 'Option 1' }] }\"></val-radio-input>\n *\n * @input props: InputMetadata - Configuration for the radio input (form control, options, etc.)\n */\nexport class RadioInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the radio input.\n * @property options - The available options for the radio group.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { IonSearchbar } from '@ionic/angular/standalone';\n\n@Component({\n selector: 'val-searchbar',\n standalone: true,\n imports: [IonSearchbar],\n template: `\n <ion-searchbar\n mode=\"ios\"\n debounce=\"500\"\n placeholder=\"Búsqueda\"\n [disabled]=\"disabled\"\n showCancelButton=\"focus\"\n cancelButtonText=\"Cancelar\"\n (ionInput)=\"onSearch($event)\"\n (ionBlur)=\"onBlur()\"\n (ionFocus)=\"onFocus()\"\n >\n </ion-searchbar>\n `,\n styleUrls: ['./searchbar.component.scss'],\n})\n/**\n * val-searchbar\n *\n * A search bar component with debounce and event emitters for filtering, focus, and blur.\n *\n * @example\n * <val-searchbar (filterEvent)=\"onFilter($event)\" (focusEvent)=\"onFocus()\" (blurEvent)=\"onBlur()\"></val-searchbar>\n *\n * @input disabled - Whether the searchbar is disabled.\n * @output filterEvent - Emits the search term on input.\n * @output focusEvent - Emits when the searchbar gains focus.\n * @output blurEvent - Emits when the searchbar loses focus.\n */\nexport class SearchbarComponent {\n /**\n * Whether the searchbar is disabled.\n */\n @Input() disabled: boolean;\n\n /**\n * Emits the search term on input.\n */\n @Output() filterEvent = new EventEmitter<string>();\n\n /**\n * Emits when the searchbar gains focus.\n */\n @Output() focusEvent = new EventEmitter<void>();\n\n /**\n * Emits when the searchbar loses focus.\n */\n @Output() blurEvent = new EventEmitter<void>();\n\n constructor() {}\n\n onSearch($event: any) {\n const searchTerm = $event.detail.value;\n this.filterEvent.emit(searchTerm);\n }\n\n onFocus() {\n this.focusEvent.emit();\n }\n\n onBlur() {\n this.blurEvent.emit();\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { IonSelect, IonSelectOption } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-select-input',\n standalone: true,\n imports: [ReactiveFormsModule, IonSelect, IonSelectOption],\n template: `\n <ion-select\n [formControl]=\"props.control\"\n [label]=\"props.label\"\n [interfaceOptions]=\"customModalOptions\"\n interface=\"modal\"\n [placeholder]=\"[props.placeholder]\"\n cancelText=\"Cancelar\"\n okText=\"Ok\"\n >\n @for (o of props.options; track o.id) {\n <ion-select-option [value]=\"o.id\">{{ o.name }}</ion-select-option>\n }\n </ion-select>\n `,\n styleUrls: ['./select-input.component.scss'],\n})\n/**\n * val-select-input\n *\n * A select/dropdown input integrated with Angular forms, using Ionic's select component.\n *\n * @example\n * <val-select-input [props]=\"{ control: myControl, label: 'Choose', options: [{ id: '1', name: 'Option 1' }] }\"></val-select-input>\n *\n * @input props: InputMetadata - Configuration for the select input (form control, label, options, etc.)\n */\nexport class SearchSelectorComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the select input.\n * @property label - The label for the select.\n * @property options - The available options for the select.\n * @property placeholder - The placeholder text.\n */\n @Input() props: InputMetadata;\n\n customModalOptions = {\n header: 'Seleccione',\n breakpoints: [0, 0.6],\n initialBreakpoint: 0.6,\n };\n\n constructor() {}\n\n ngOnInit() {\n if (this.props?.withDefault || this.props?.value) {\n applyDefaultValueToControl(this.props);\n }\n this.customModalOptions.header = this.props.label;\n }\n}\n","/**\n * Removes diacritical marks (accents) from a string using Unicode normalization.\n * Useful for text search and comparison.\n *\n * @param text The input string\n * @returns The normalized string without diacritical marks\n *\n * @example\n * replaceSpecialChars('canción') // returns 'cancion'\n */\nexport const replaceSpecialChars = (text: string) =>\n text.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { IonicModule, IonModal } from '@ionic/angular';\nimport { Subscription } from 'rxjs';\nimport { IconService } from '../../../services/icons.service';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { replaceSpecialChars } from '../../../shared/utils/text';\nimport { InputMetadata, InputOption } from '../../types';\nimport { SearchbarComponent } from '../searchbar/searchbar.component';\n\n@Component({\n selector: 'val-select-search',\n standalone: true,\n imports: [CommonModule, IonicModule, FormsModule, SearchbarComponent, ReactiveFormsModule],\n template: `\n <ion-input\n type=\"text\"\n [value]=\"displayValue\"\n [placeholder]=\"props?.placeholder || placeholder\"\n readonly\n (mousedown)=\"preventDefaultBehavior($event)\"\n />\n\n <ion-input style=\"position: absolute;\" [formControl]=\"props.control\" type=\"hidden\"></ion-input>\n\n <ion-modal\n #modal\n trigger=\"open-modal\"\n [initialBreakpoint]=\"1\"\n [breakpoints]=\"[0, 0.5, 0.75, 1]\"\n (didDismiss)=\"cancelModal()\"\n >\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-title>{{ label }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"cancelModal()\">Cerrar</ion-button>\n </ion-buttons>\n </ion-toolbar>\n <ion-toolbar>\n <val-searchbar (filterEvent)=\"onFilter($event)\" (focusEvent)=\"onFocus()\" (blurEvent)=\"onBlur()\" />\n </ion-toolbar>\n </ion-header>\n <ion-content>\n <ion-list>\n <ion-item *ngFor=\"let item of filteredItems\" button (click)=\"selectItem(item)\" detail=\"false\">\n <ion-label>{{ item[labelProperty] }}</ion-label>\n <ion-icon *ngIf=\"isItemSelected(item)\" name=\"checkmark-outline\" slot=\"end\" color=\"primary\"></ion-icon>\n </ion-item>\n <ion-item *ngIf=\"filteredItems.length === 0\" lines=\"none\">\n <ion-label color=\"dark\">No se encontraron resultados</ion-label>\n </ion-item>\n </ion-list>\n </ion-content>\n </ng-template>\n </ion-modal>\n `,\n styles: [\n `\n ion-header {\n padding: 8px 8px 0px 8px;\n }\n `,\n ],\n})\n/**\n * val-select-search\n *\n * A searchable select/dropdown input with modal and filtering, integrated with Angular forms.\n *\n * @example\n * <val-select-search [props]=\"{ control: myControl, label: 'Choose', options: [{ id: '1', name: 'Option 1' }] }\"></val-select-search>\n *\n * @input props: InputMetadata - Configuration for the select input (form control, label, options, etc.)\n */\nexport class SelectSearchComponent implements OnChanges, OnDestroy {\n @ViewChild('modal') modal!: IonModal;\n\n @Input() label: string;\n @Input() labelProperty: string = 'name';\n @Input() valueProperty: string = 'id';\n @Input() multiple: boolean = false;\n @Input() placeholder: string;\n\n private langService = inject(LangService);\n\n constructor() {\n this.label = this.langService.getText('_global', 'select', 'Seleccionar');\n this.placeholder = this.langService.getText('_global', 'selectOption', 'Seleccione una opción');\n }\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the select input.\n * @property label - The label for the select.\n * @property options - The available options for the select.\n * @property placeholder - The placeholder text.\n */\n @Input() props: InputMetadata;\n\n icon = inject(IconService);\n private changeDetector = inject(ChangeDetectorRef);\n\n searchTerm: string = '';\n filteredItems: InputOption[] = [];\n selectedItems: InputOption[] = [];\n displayValue: string = '';\n\n private previousOptions: any[] = [];\n private isProcessingChanges = false;\n private valueChangesSubscription?: Subscription;\n\n ngOnInit() {\n this.applyDefaultValue();\n this.initializeItems();\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n this.subscribeToValueChanges();\n }\n\n ngOnDestroy() {\n // Limpiar suscripciones para evitar memory leaks\n if (this.valueChangesSubscription) {\n this.valueChangesSubscription.unsubscribe();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // Evitar bucles infinitos\n if (this.isProcessingChanges) {\n return;\n }\n\n // Cuando cambia props o props.options\n if (changes['props']) {\n try {\n this.isProcessingChanges = true;\n\n // Desuscribirse del antiguo control si existe\n if (this.valueChangesSubscription) {\n this.valueChangesSubscription.unsubscribe();\n }\n\n if (this.props?.options) {\n // Verificar si las opciones han cambiado realmente\n const optionsChanged = !this.areOptionsEqual(this.previousOptions, this.props.options);\n\n if (optionsChanged) {\n this.previousOptions = [...this.props.options];\n this.initializeItems();\n }\n }\n\n // Sincronizar con el nuevo control si existe\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n\n // Suscribirse al nuevo control\n this.subscribeToValueChanges();\n } finally {\n this.isProcessingChanges = false;\n }\n }\n }\n\n ionViewWillEnter(): void {\n if (this.isProcessingChanges) {\n return;\n }\n\n try {\n this.isProcessingChanges = true;\n this.initializeItems();\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n this.subscribeToValueChanges();\n } finally {\n this.isProcessingChanges = false;\n }\n }\n\n // Suscribirse a cambios en el FormControl\n private subscribeToValueChanges() {\n if (!this.props?.control) return;\n\n this.valueChangesSubscription = this.props.control.valueChanges.subscribe(value => {\n if (this.isProcessingChanges) return;\n\n try {\n this.isProcessingChanges = true;\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n } finally {\n this.isProcessingChanges = false;\n }\n });\n }\n\n // Compara si dos arrays de opciones son iguales\n private areOptionsEqual(prevOptions: any[], newOptions: any[]): boolean {\n // PERF: Use reference equality first for fast path\n if (prevOptions === newOptions) return true;\n if (!prevOptions || !newOptions) return prevOptions === newOptions;\n if (prevOptions.length !== newOptions.length) return false;\n // Only compare valueProperty for equality\n for (let i = 0; i < prevOptions.length; i++) {\n if (prevOptions[i][this.valueProperty] !== newOptions[i][this.valueProperty]) {\n return false;\n }\n }\n return true;\n }\n\n private initializeItems(): void {\n // PERF: Avoid unnecessary array copies\n this.filteredItems = this.props?.options || [];\n }\n\n private syncControlValueWithSelectedItems(): void {\n if (!this.props?.control) {\n this.selectedItems = [];\n return;\n }\n const controlValue = this.props.control.value;\n if (controlValue === null || controlValue === undefined) {\n this.selectedItems = [];\n return;\n }\n // PERF: Use a Map for faster lookup if options are large\n if (this.props.options && this.props.options.length > 0) {\n const map = new Map(this.props.options.map(opt => [opt[this.valueProperty], opt]));\n const selectedOption = map.get(controlValue);\n this.selectedItems = selectedOption ? [selectedOption] : [];\n } else {\n this.selectedItems = [];\n }\n }\n\n private applyDefaultValue(): void {\n applyDefaultValueToControl(this.props);\n }\n\n onFilter(event) {\n // If no search term, show all options\n if (!event || event.trim() === '') {\n this.filteredItems = this.props?.options ? [...this.props.options] : [];\n this.changeDetector.detectChanges();\n return;\n }\n\n // If no options, nothing to filter\n if (!this.props?.options || this.props.options.length === 0) {\n this.filteredItems = [];\n this.changeDetector.detectChanges();\n return;\n }\n\n // PERF: Avoid repeated replaceSpecialChars and toLowerCase for each option\n const search = replaceSpecialChars(event.toLowerCase());\n this.filteredItems = this.props.options.filter(element => {\n // Only use labelProperty and valueProperty for filtering (faster)\n const label = element[this.labelProperty]\n ? replaceSpecialChars(String(element[this.labelProperty]).toLowerCase())\n : '';\n const value = element[this.valueProperty]\n ? replaceSpecialChars(String(element[this.valueProperty]).toLowerCase())\n : '';\n return label.includes(search) || value.includes(search);\n });\n this.changeDetector.detectChanges();\n }\n\n onFocus() {\n console.log('onFocus');\n }\n\n onBlur() {\n console.log('onBlur');\n }\n\n openModal() {\n if (this.modal) {\n this.modal.present();\n }\n }\n\n preventDefaultBehavior(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.openModal();\n }\n\n cancelModal() {\n // Reset filter and show all options when closing modal\n this.searchTerm = '';\n this.filteredItems = this.props?.options ? [...this.props.options] : [];\n this.changeDetector.detectChanges();\n if (this.modal) {\n this.modal.dismiss();\n }\n }\n\n selectItem(item: any) {\n if (this.multiple) {\n const index = this.selectedItems.findIndex(\n selectedItem => selectedItem[this.valueProperty] === item[this.valueProperty]\n );\n\n if (index === -1) {\n this.selectedItems.push(item);\n } else {\n this.selectedItems.splice(index, 1);\n }\n } else {\n this.selectedItems = [item];\n this.cancelModal();\n }\n\n this.updateDisplayValue();\n this.applyChanges();\n }\n\n isItemSelected(item: any): boolean {\n return this.selectedItems.some(selectedItem => selectedItem[this.valueProperty] === item[this.valueProperty]);\n }\n\n updateDisplayValue() {\n if (this.selectedItems.length === 0) {\n this.displayValue = '';\n return;\n }\n\n if (this.multiple) {\n if (this.selectedItems.length === 1) {\n this.displayValue = this.selectedItems[0][this.labelProperty];\n } else {\n this.displayValue = `${this.selectedItems.length} elementos seleccionados`;\n }\n } else {\n this.displayValue = this.selectedItems[0][this.labelProperty];\n }\n }\n\n applyChanges() {\n if (!this.props?.control) {\n return;\n }\n\n try {\n this.isProcessingChanges = true;\n\n if (this.selectedItems.length > 0) {\n this.props.control.setValue(this.selectedItems[0][this.valueProperty]);\n } else {\n this.props.control.setValue(null);\n }\n\n this.props.control.markAsDirty();\n this.props.control.updateValueAndValidity();\n } finally {\n this.isProcessingChanges = false;\n }\n }\n\n // Método público para reiniciar el componente\n reset() {\n this.selectedItems = [];\n this.displayValue = '';\n if (this.props?.control) {\n this.props.control.setValue(null);\n }\n this.changeDetector.detectChanges();\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonInput } from '@ionic/angular/standalone';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { ComponentStates, InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-text-input',\n standalone: true,\n imports: [ReactiveFormsModule, IonInput],\n template: ` <ion-input [formControl]=\"props.control\" type=\"text\" [placeholder]=\"props.placeholder\" /> `,\n styleUrls: ['./text-input.component.scss'],\n})\n/**\n * val-text-input\n *\n * A text input field integrated with Angular forms.\n *\n * @example\n * <val-text-input [props]=\"{ control: myControl, placeholder: 'Enter text', ... }\"></val-text-input>\n *\n * @input props: InputMetadata - Configuration for the input (form control, placeholder, label, etc.)\n */\nexport class TextInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the input.\n * @property placeholder - The placeholder text.\n * @property label, name, hint, type, validators, etc. - See InputMetadata for all options.\n */\n @Input() props: InputMetadata;\n\n states = ComponentStates;\n\n constructor() {}\n\n ngOnInit() {\n // Apply default values on initialization\n if (this.props?.withDefault || this.props?.value) {\n applyDefaultValueToControl(this.props);\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n inject,\n Input,\n OnChanges,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { Clipboard } from '@capacitor/clipboard';\nimport { ToastController } from '@ionic/angular';\nimport { IonButton, IonIcon } from '@ionic/angular/standalone';\nimport * as Prism from 'prismjs';\n\nimport 'prismjs/components/prism-css';\nimport 'prismjs/components/prism-javascript';\nimport 'prismjs/components/prism-markup';\nimport 'prismjs/components/prism-typescript';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { CodeDisplayMetadata } from './types';\n\n@Component({\n selector: 'val-code-display',\n standalone: true,\n imports: [CommonModule, IonIcon, IonButton],\n template: `\n <div class=\"code-viewer-container\">\n <div class=\"tab-bar\">\n <div\n class=\"tab\"\n *ngFor=\"let tab of props.tabs; let i = index\"\n [class.active]=\"i === selectedTab\"\n (click)=\"selectTab(i)\"\n >\n <span class=\"tab-label\">{{ tab.label }}</span>\n </div>\n </div>\n <div class=\"code-content\">\n <!-- <span class=\"language-badge\">{{ props.tabs[selectedTab]?.language || props.language }}</span> -->\n <ion-button fill=\"clear\" class=\"copy-button\" (click)=\"copyToClipboard()\">\n <ion-icon name=\"copy-outline\"></ion-icon>\n </ion-button>\n <pre><code [class]=\"'language-' + (props.tabs[selectedTab]?.language || props.language)\" #codeElement></code></pre>\n </div>\n </div>\n `,\n\n styleUrl: './code-display.component.scss',\n})\nexport class CodeDisplayComponent implements AfterViewInit, OnChanges {\n @ViewChild('codeElement') codeElement!: ElementRef<HTMLElement>;\n\n @Input() props: CodeDisplayMetadata;\n\n toast = inject(ToastController);\n langService = inject(LangService);\n selectedTab: number = 0;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['code'] || changes['language'] || changes['tabs']) {\n this.cdr.detectChanges();\n setTimeout(() => this.highlightCode());\n }\n }\n\n ngAfterViewInit() {\n setTimeout(() => this.highlightCode());\n }\n\n selectTab(i: number) {\n this.selectedTab = i;\n this.cdr.detectChanges();\n setTimeout(() => this.highlightCode());\n }\n\n private highlightCode() {\n if (this.codeElement) {\n const code = this.props.tabs.length > 0 ? this.props.tabs[this.selectedTab]?.code : this.props.code;\n this.codeElement.nativeElement.textContent = code || '';\n Prism.highlightElement(this.codeElement.nativeElement);\n }\n }\n\n async copyToClipboard() {\n try {\n const code = this.props.tabs.length > 0 ? this.props.tabs[this.selectedTab]?.code : this.props.code;\n await Clipboard.write({ string: code || '' });\n const copiedMessage = this.langService.getText('_global', 'copied', '¡Copiado al portapapeles!');\n this.presentToast(copiedMessage);\n } catch (error) {\n console.error('Error al copiar al portapapeles:', error);\n }\n }\n\n async presentToast(message: string) {\n const toast = await this.toast.create({\n message: message,\n duration: 2000,\n position: 'bottom',\n color: 'dark',\n });\n toast.present();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { DisplayComponent } from '../../atoms/display/display.component';\nimport { ActionHeaderMetadata } from './types';\n\n@Component({\n selector: 'val-action-header',\n standalone: true,\n imports: [CommonModule, DisplayComponent, ButtonComponent],\n template: `\n <section class=\"header-content-container\">\n <val-display [props]=\"props.title\" />\n <val-button [props]=\"props.action\" />\n </section>\n `,\n styles: `\n .header-content-container {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n `,\n})\nexport class ActionHeaderComponent {\n @Input() props: ActionHeaderMetadata;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, Input } from '@angular/core';\nimport { ThemeService } from '../../../services/theme.service';\nimport { ActionHeaderComponent } from '../action-header/action-header.component';\nimport { PillMetadata } from './types';\n\n@Component({\n selector: 'val-pill',\n standalone: true,\n imports: [CommonModule, ActionHeaderComponent],\n template: `\n <div\n [id]=\"props.token\"\n class=\"fun-card\"\n [class.bordered]=\"props.bordered\"\n [class.hoverable]=\"props.hoverable\"\n [ngStyle]=\"{\n background: theme.IsDark ? 'var(--ion-background-color)' : props.background,\n }\"\n >\n <val-action-header style=\"width: 100%;\" [props]=\"props.content\" />\n </div>\n `,\n styleUrls: ['./pill.component.scss'],\n})\nexport class PillComponent {\n theme = inject(ThemeService);\n\n @Input()\n props: PillMetadata;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, Input } from '@angular/core';\nimport { Clipboard } from '@capacitor/clipboard';\nimport { ToastController } from '@ionic/angular';\nimport { IonIcon } from '@ionic/angular/standalone';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { CommandDisplayMetadata } from './types';\n\n@Component({\n selector: 'val-command-display',\n standalone: true,\n imports: [CommonModule, IonIcon],\n template: `\n <div class=\"command-container\">\n <div class=\"command-text\">$ {{ props.text }}</div>\n <ion-icon name=\"copy-outline\" class=\"copy-icon\" (click)=\"copyCommand()\"></ion-icon>\n </div>\n `,\n styleUrls: ['./command-display.component.scss'],\n})\nexport class CommandDisplayComponent {\n toast = inject(ToastController);\n langService = inject(LangService);\n\n @Input() props: CommandDisplayMetadata;\n\n constructor() {}\n\n async copyCommand() {\n if (this.props.text) {\n await Clipboard.write({\n string: this.props.text,\n });\n const copiedMessage = this.langService.getText('_global', 'copied', '¡Copiado al portapapeles!');\n this.presentToast(copiedMessage);\n }\n }\n\n async presentToast(message: string) {\n const toast = await this.toast.create({\n message: message,\n duration: 2000,\n position: 'bottom',\n color: 'dark',\n });\n toast.present();\n }\n}\n","// src/app/layout/layout.component.ts (solo la parte de styles)\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, Input } from '@angular/core';\nimport { LinkComponent } from '../link/link.component';\nimport { TitleBlockComponent } from '../title-block/title-block.component';\nimport { ImageComponent } from '../../atoms/image/image.component';\nimport { ButtonGroupComponent } from '../button-group/button-group.component';\nimport { IconService } from '../../../services/icons.service';\nimport { InfoMetadata } from './types';\n\n@Component({\n selector: 'val-info',\n standalone: true,\n imports: [CommonModule, LinkComponent, TitleBlockComponent, ImageComponent, ButtonGroupComponent],\n template: `\n @if (props.image) {\n <val-image style=\"display: contents;\" [props]=\"props.image\" />\n }\n <val-title-block style=\"display: block;margin-top: 16px;\" [props]=\"props.title\" />\n\n @if (props.link) {\n <val-link [props]=\"props.link\" />\n }\n\n @if (props.actions) {\n <val-button-group [props]=\"props.actions\" />\n }\n `,\n styles: ``,\n})\nexport class InfoComponent {\n icon = inject(IconService);\n\n @Input() props: InfoMetadata;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n inject,\n Input,\n OnChanges,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { Clipboard } from '@capacitor/clipboard';\nimport { ToastController } from '@ionic/angular';\nimport { IonButton, IonIcon } from '@ionic/angular/standalone';\n\nimport * as Prism from 'prismjs';\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-css';\nimport 'prismjs/components/prism-javascript';\nimport 'prismjs/components/prism-markup';\nimport 'prismjs/components/prism-typescript';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { PlainCodeBoxMetadata } from './types';\n\n@Component({\n selector: 'val-plain-code-box',\n standalone: true,\n imports: [CommonModule, IonIcon, IonButton],\n template: `\n <div class=\"code-box-container\">\n <ion-button *ngIf=\"props.showCopyButton !== false\" fill=\"clear\" class=\"copy-button\" (click)=\"copyCode()\">\n <ion-icon name=\"copy-outline\"></ion-icon>\n </ion-button>\n <pre><code [class]=\"'language-' + (props.language || 'bash')\" #codeBlock><ng-container *ngFor=\"let line of props.lines; let i = index\"><span [class]=\"line.type ? 'line-' + line.type : 'line-normal'\">{{ line.text }}</span><br *ngIf=\"i < props.lines.length - 1\">\n</ng-container></code></pre>\n </div>\n `,\n styleUrls: ['./plain-code-box.component.scss'],\n})\nexport class PlainCodeBoxComponent implements AfterViewInit, OnChanges {\n toast = inject(ToastController);\n cdr = inject(ChangeDetectorRef);\n langService = inject(LangService);\n\n @Input() props: PlainCodeBoxMetadata = { lines: [] };\n\n @ViewChild('codeBlock') codeBlock!: ElementRef<HTMLElement>;\n\n constructor() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props'] && !changes['props'].firstChange) {\n this.cdr.detectChanges();\n setTimeout(() => this.highlightCode());\n }\n }\n\n ngAfterViewInit() {\n setTimeout(() => this.highlightCode());\n }\n\n private highlightCode() {\n if (this.codeBlock && this.props.lines && this.props.lines.length > 0) {\n Prism.highlightElement(this.codeBlock.nativeElement);\n }\n }\n\n async copyCode() {\n const fullCode = this.props.lines.map(line => line.text).join('\\n');\n if (fullCode) {\n await Clipboard.write({\n string: fullCode,\n });\n const copiedMessage = this.langService.getText('_global', 'copied', '¡Copiado al portapapeles!');\n this.presentToast(copiedMessage);\n }\n }\n\n async presentToast(message: string) {\n const toast = await this.toast.create({\n message: message,\n duration: 2000,\n position: 'bottom',\n color: 'dark',\n });\n toast.present();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { ImageComponent } from '../../atoms/image/image.component';\nimport { ImageMetadata } from '../../atoms/image/types';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { TitleComponent } from '../../atoms/title/title.component';\nimport {\n ArticleButtonElement,\n ArticleCodeElement,\n ArticleCustomElement,\n ArticleElement,\n ArticleHighlightElement,\n ArticleImageElement,\n ArticleListElement,\n ArticleMetadata,\n ArticleQuoteElement,\n ArticleSeparatorElement,\n ArticleSubtitleElement,\n ArticleTextElement,\n ArticleTitleElement,\n ArticleVideoElement,\n} from './types';\n\n@Component({\n selector: 'val-article',\n standalone: true,\n imports: [CommonModule, TitleComponent, TextComponent, ButtonComponent, ImageComponent],\n template: `\n <article\n class=\"val-article\"\n [class]=\"props.cssClass\"\n [ngClass]=\"{\n 'val-article--centered': props.centered,\n 'val-article--light': props.theme === 'light',\n 'val-article--dark': props.theme === 'dark',\n }\"\n [style.max-width]=\"props.maxWidth\"\n >\n <div\n *ngFor=\"let element of props.elements; trackBy: trackByFn\"\n class=\"val-article__element\"\n [class]=\"element.cssClass\"\n [ngClass]=\"getElementSpacingClass(element)\"\n [style.display]=\"element.visible === false ? 'none' : 'block'\"\n >\n <!-- Título -->\n <ng-container *ngIf=\"element.type === 'title'\">\n <val-title [props]=\"getTitleElement(element).props\"></val-title>\n </ng-container>\n\n <!-- Subtítulo -->\n <ng-container *ngIf=\"element.type === 'subtitle'\">\n <val-title [props]=\"getSubtitleElement(element).props\"></val-title>\n </ng-container>\n\n <!-- Texto/Párrafo -->\n <ng-container *ngIf=\"element.type === 'text' || element.type === 'paragraph'\">\n <val-text [props]=\"getTextElement(element).props\"></val-text>\n </ng-container>\n\n <!-- Cita -->\n <ng-container *ngIf=\"element.type === 'quote'\">\n <div class=\"val-article__quote\">\n <div class=\"val-article__quote-content\">\n <val-text [props]=\"getQuoteTextProps(element)\"></val-text>\n </div>\n <div *ngIf=\"getQuoteElement(element).props.author\" class=\"val-article__quote-author\">\n — {{ getQuoteElement(element).props.author }}\n <span *ngIf=\"getQuoteElement(element).props.source\" class=\"val-article__quote-source\">\n , {{ getQuoteElement(element).props.source }}\n </span>\n </div>\n </div>\n </ng-container>\n\n <!-- Texto destacado -->\n <ng-container *ngIf=\"element.type === 'highlight'\">\n <div\n class=\"val-article__highlight\"\n [ngClass]=\"{\n 'val-article__highlight--rounded': getHighlightElement(element).props.rounded,\n }\"\n [style.background-color]=\"getHighlightColor(element)\"\n >\n <val-text [props]=\"getHighlightTextProps(element)\"></val-text>\n </div>\n </ng-container>\n\n <!-- Código -->\n <ng-container *ngIf=\"element.type === 'code'\">\n <div class=\"val-article__code\">\n <div *ngIf=\"getCodeElement(element).props.language\" class=\"val-article__code-language\">\n {{ getCodeElement(element).props.language }}\n </div>\n <pre\n class=\"val-article__code-content\"\n [ngClass]=\"{\n 'val-article__code-content--dark': getCodeElement(element).props.theme === 'dark',\n }\"\n ><code>{{ getCodeElement(element).props.code }}</code></pre>\n </div>\n </ng-container>\n\n <!-- Lista -->\n <ng-container *ngIf=\"element.type === 'list'\">\n <ul *ngIf=\"getListElement(element).props.listType !== 'ordered'\" class=\"val-article__list\">\n <li *ngFor=\"let item of getListElement(element).props.items\" class=\"val-article__list-item\">\n <span *ngIf=\"getListElement(element).props.listType === 'checklist'\" class=\"val-article__list-check\"\n >✓</span\n >\n {{ item.text }}\n </li>\n </ul>\n <ol\n *ngIf=\"getListElement(element).props.listType === 'ordered'\"\n class=\"val-article__list val-article__list--ordered\"\n >\n <li *ngFor=\"let item of getListElement(element).props.items\" class=\"val-article__list-item\">\n {{ item.text }}\n </li>\n </ol>\n </ng-container>\n\n <!-- Botón -->\n <ng-container *ngIf=\"element.type === 'button'\">\n <div\n class=\"val-article__button-container\"\n [ngClass]=\"{\n 'val-article__button-container--left': getButtonElement(element).props.alignment === 'left',\n 'val-article__button-container--center': getButtonElement(element).props.alignment === 'center',\n 'val-article__button-container--right': getButtonElement(element).props.alignment === 'right',\n }\"\n >\n <val-button [props]=\"getButtonProps(element)\"></val-button>\n </div>\n </ng-container>\n\n <!-- Separador -->\n <ng-container *ngIf=\"element.type === 'separator'\">\n <div class=\"val-article__separator\">\n <hr\n *ngIf=\"getSeparatorElement(element).props.style === 'line'\"\n class=\"val-article__separator-line\"\n [ngClass]=\"{\n 'val-article__separator-line--thin': getSeparatorElement(element).props.thickness === 'thin',\n 'val-article__separator-line--thick': getSeparatorElement(element).props.thickness === 'thick',\n }\"\n />\n <div *ngIf=\"getSeparatorElement(element).props.style === 'dots'\" class=\"val-article__separator-dots\">\n • • •\n </div>\n <div\n *ngIf=\"getSeparatorElement(element).props.style === 'space'\"\n class=\"val-article__separator-space\"\n ></div>\n </div>\n </ng-container>\n\n <!-- Imagen -->\n <ng-container *ngIf=\"element.type === 'image'\">\n <val-image [props]=\"getImageMetadata(element)\"></val-image>\n </ng-container>\n\n <!-- Video -->\n <ng-container *ngIf=\"element.type === 'video'\">\n <div class=\"val-article__video\">\n <video\n [src]=\"getVideoElement(element).props.src\"\n [poster]=\"getVideoElement(element).props.poster\"\n [controls]=\"getVideoElement(element).props.controls !== false\"\n [autoplay]=\"getVideoElement(element).props.autoplay\"\n [muted]=\"getVideoElement(element).props.muted\"\n [style.max-width]=\"getVideoElement(element).props.maxWidth\"\n class=\"val-article__video-content\"\n >\n Tu navegador no soporta el elemento video.\n </video>\n <div *ngIf=\"getVideoElement(element).props.title\" class=\"val-article__video-title\">\n {{ getVideoElement(element).props.title }}\n </div>\n </div>\n </ng-container>\n\n <!-- Contenido personalizado -->\n <ng-container *ngIf=\"element.type === 'custom'\">\n <div class=\"val-article__custom\" [innerHTML]=\"getCustomElement(element).props.htmlContent\"></div>\n </ng-container>\n </div>\n </article>\n `,\n styleUrls: ['./article.component.scss'],\n // changeDetection: ChangeDetectionStrategy.OnPush, // Comentado temporalmente para debug\n})\n/**\n * val-article\n *\n * Componente para crear artículos, blogs y documentación de forma declarativa.\n * Permite combinar múltiples elementos (títulos, texto, imágenes, código, etc.)\n * con espaciado automático y soporte multi-idioma.\n *\n * @example Uso básico:\n * ```html\n * <val-article [props]=\"articleConfig\"></val-article>\n * ```\n *\n * @example Con ArticleBuilder:\n * ```typescript\n * articleConfig = new ArticleBuilder()\n * .title(titleProps)\n * .paragraph(textProps)\n * .code('console.log(\"Hello World\")', 'javascript')\n * .build();\n * ```\n *\n * @input props: ArticleMetadata - Configuración completa del artículo\n */\nexport class ArticleComponent implements OnInit {\n /**\n * Configuración del artículo\n * @type {ArticleMetadata}\n */\n @Input()\n props!: ArticleMetadata;\n\n constructor() {}\n\n ngOnInit() {\n // Validación básica\n if (!this.props || !this.props.elements) {\n console.warn('val-article: props.elements is required');\n }\n }\n\n /**\n * Función de trackBy para optimizar el rendering de elementos\n */\n trackByFn(index: number, element: ArticleElement): any {\n return element.id || index;\n }\n\n /**\n * Obtiene las clases CSS para el espaciado del elemento\n */\n getElementSpacingClass(element: ArticleElement): string {\n const spacing = element.spacing || this.props.defaultSpacing;\n const classes: string[] = [];\n\n if (spacing?.top) {\n classes.push(`val-article__spacing-top--${spacing.top}`);\n }\n if (spacing?.bottom) {\n classes.push(`val-article__spacing-bottom--${spacing.bottom}`);\n }\n if (spacing?.horizontal) {\n classes.push(`val-article__spacing-horizontal--${spacing.horizontal}`);\n }\n\n return classes.join(' ');\n }\n\n // === FUNCIONES DE TIPO PARA TYPESCRIPT ===\n\n getTitleElement(element: ArticleElement): ArticleTitleElement {\n return element as ArticleTitleElement;\n }\n\n getSubtitleElement(element: ArticleElement): ArticleSubtitleElement {\n return element as ArticleSubtitleElement;\n }\n\n getTextElement(element: ArticleElement): ArticleTextElement {\n return element as ArticleTextElement;\n }\n\n getQuoteElement(element: ArticleElement): ArticleQuoteElement {\n return element as ArticleQuoteElement;\n }\n\n getHighlightElement(element: ArticleElement): ArticleHighlightElement {\n return element as ArticleHighlightElement;\n }\n\n getCodeElement(element: ArticleElement): ArticleCodeElement {\n return element as ArticleCodeElement;\n }\n\n getListElement(element: ArticleElement): ArticleListElement {\n return element as ArticleListElement;\n }\n\n getButtonElement(element: ArticleElement): ArticleButtonElement {\n return element as ArticleButtonElement;\n }\n\n getSeparatorElement(element: ArticleElement): ArticleSeparatorElement {\n return element as ArticleSeparatorElement;\n }\n\n getImageElement(element: ArticleElement): ArticleImageElement {\n return element as ArticleImageElement;\n }\n\n getVideoElement(element: ArticleElement): ArticleVideoElement {\n return element as ArticleVideoElement;\n }\n\n getCustomElement(element: ArticleElement): ArticleCustomElement {\n return element as ArticleCustomElement;\n }\n\n // === FUNCIONES AUXILIARES PARA PROPS ===\n\n getQuoteTextProps(element: ArticleElement) {\n const quoteElement = this.getQuoteElement(element);\n const { author, source, ...textProps } = quoteElement.props;\n return textProps;\n }\n\n getHighlightTextProps(element: ArticleElement) {\n const highlightElement = this.getHighlightElement(element);\n const { backgroundColor, rounded, ...textProps } = highlightElement.props;\n return textProps;\n }\n\n getHighlightColor(element: ArticleElement): string {\n const highlightElement = this.getHighlightElement(element);\n return highlightElement.props.backgroundColor || 'var(--ion-color-light)';\n }\n\n getButtonProps(element: ArticleElement) {\n const buttonElement = this.getButtonElement(element);\n const { alignment, ...buttonProps } = buttonElement.props;\n return buttonProps;\n }\n\n getImageMetadata(element: ArticleElement): ImageMetadata {\n const imageElement = this.getImageElement(element);\n const props = imageElement.props;\n\n return {\n src: props.src,\n alt: props.alt,\n mode: props.rounded ? 'rounded' : 'box',\n size: 'medium',\n shaded: false,\n bordered: false,\n alignment: props.alignment || 'center',\n caption: props.caption,\n captionSize: 'medium' as const,\n width: props.maxWidth ? parseInt(props.maxWidth.replace('px', '')) : undefined,\n };\n }\n}\n","import { Color } from '@ionic/core';\nimport { TextMetadata } from '../../atoms/text/types';\nimport { TitleMetadata } from '../../atoms/title/types';\nimport { ButtonMetadata } from '../../types';\n\n/**\n * Tipos de contenido soportados en el componente val-article\n */\nexport type ArticleContentType =\n | 'title'\n | 'subtitle'\n | 'text'\n | 'paragraph'\n | 'quote'\n | 'highlight'\n | 'code'\n | 'list'\n | 'button'\n | 'separator'\n | 'image'\n | 'video'\n | 'custom';\n\n/**\n * Configuración de espaciado entre elementos\n */\nexport interface ArticleSpacing {\n /** Espaciado superior */\n top?: 'none' | 'small' | 'medium' | 'large' | 'xlarge';\n /** Espaciado inferior */\n bottom?: 'none' | 'small' | 'medium' | 'large' | 'xlarge';\n /** Espaciado lateral */\n horizontal?: 'none' | 'small' | 'medium' | 'large' | 'xlarge';\n}\n\n/**\n * Configuración base para cualquier elemento del artículo\n */\nexport interface BaseArticleElement {\n /** Tipo de elemento */\n type: ArticleContentType;\n /** ID único del elemento (opcional) */\n id?: string;\n /** Clases CSS adicionales */\n cssClass?: string;\n /** Configuración de espaciado */\n spacing?: ArticleSpacing;\n /** Elemento visible condicionalmente */\n visible?: boolean;\n}\n\n/**\n * Elemento de título\n */\nexport interface ArticleTitleElement extends BaseArticleElement {\n type: 'title';\n props: TitleMetadata;\n}\n\n/**\n * Elemento de subtítulo\n */\nexport interface ArticleSubtitleElement extends BaseArticleElement {\n type: 'subtitle';\n props: TitleMetadata;\n}\n\n/**\n * Elemento de texto/párrafo\n */\nexport interface ArticleTextElement extends BaseArticleElement {\n type: 'text' | 'paragraph';\n props: TextMetadata;\n}\n\n/**\n * Elemento de cita\n */\nexport interface ArticleQuoteElement extends BaseArticleElement {\n type: 'quote';\n props: TextMetadata & {\n /** Autor de la cita */\n author?: string;\n /** Fuente de la cita */\n source?: string;\n };\n}\n\n/**\n * Elemento de texto destacado\n */\nexport interface ArticleHighlightElement extends BaseArticleElement {\n type: 'highlight';\n props: TextMetadata & {\n /** Color de fondo del highlight */\n backgroundColor?: Color;\n /** Esquinas redondeadas */\n rounded?: boolean;\n };\n}\n\n/**\n * Elemento de código\n */\nexport interface ArticleCodeElement extends BaseArticleElement {\n type: 'code';\n props: {\n /** Código a mostrar */\n code: string;\n /** Lenguaje de programación */\n language?: string;\n /** Mostrar números de línea */\n showLineNumbers?: boolean;\n /** Tema del código */\n theme?: 'light' | 'dark';\n };\n}\n\n/**\n * Elemento de lista\n */\nexport interface ArticleListElement extends BaseArticleElement {\n type: 'list';\n props: {\n /** Elementos de la lista */\n items: Array<{\n /** Texto del elemento */\n text: string;\n /** Configuración de contenido reactivo */\n contentKey?: string;\n contentClass?: string;\n contentFallback?: string;\n contentInterpolation?: Record<string, string | number>;\n }>;\n /** Tipo de lista */\n listType?: 'unordered' | 'ordered' | 'checklist';\n /** Color de los elementos */\n color?: Color;\n };\n}\n\n/**\n * Elemento de botón\n */\nexport interface ArticleButtonElement extends BaseArticleElement {\n type: 'button';\n props: ButtonMetadata & {\n /** Alineación del botón */\n alignment?: 'left' | 'center' | 'right';\n };\n}\n\n/**\n * Elemento separador\n */\nexport interface ArticleSeparatorElement extends BaseArticleElement {\n type: 'separator';\n props: {\n /** Tipo de separador */\n style?: 'line' | 'dots' | 'space';\n /** Color del separador */\n color?: Color;\n /** Grosor del separador */\n thickness?: 'thin' | 'medium' | 'thick';\n };\n}\n\n/**\n * Elemento de imagen\n */\nexport interface ArticleImageElement extends BaseArticleElement {\n type: 'image';\n props: {\n /** URL de la imagen */\n src: string;\n /** Texto alternativo */\n alt: string;\n /** Título de la imagen */\n title?: string;\n /** Leyenda de la imagen */\n caption?: string;\n /** Configuración de contenido reactivo para caption */\n captionContentKey?: string;\n captionContentClass?: string;\n captionContentFallback?: string;\n /** Alineación de la imagen */\n alignment?: 'left' | 'center' | 'right';\n /** Ancho máximo */\n maxWidth?: string;\n /** Imagen con bordes redondeados */\n rounded?: boolean;\n };\n}\n\n/**\n * Elemento de video\n */\nexport interface ArticleVideoElement extends BaseArticleElement {\n type: 'video';\n props: {\n /** URL del video */\n src: string;\n /** Imagen de poster */\n poster?: string;\n /** Título del video */\n title?: string;\n /** Controles visibles */\n controls?: boolean;\n /** Reproducción automática */\n autoplay?: boolean;\n /** Silenciado por defecto */\n muted?: boolean;\n /** Ancho máximo */\n maxWidth?: string;\n };\n}\n\n/**\n * Elemento personalizado\n */\nexport interface ArticleCustomElement extends BaseArticleElement {\n type: 'custom';\n props: {\n /** Contenido HTML personalizado */\n htmlContent?: string;\n /** Clase de componente personalizado */\n componentClass?: any;\n /** Props para el componente personalizado */\n componentProps?: any;\n };\n}\n\n/**\n * Unión de todos los tipos de elementos posibles\n */\nexport type ArticleElement =\n | ArticleTitleElement\n | ArticleSubtitleElement\n | ArticleTextElement\n | ArticleQuoteElement\n | ArticleHighlightElement\n | ArticleCodeElement\n | ArticleListElement\n | ArticleButtonElement\n | ArticleSeparatorElement\n | ArticleImageElement\n | ArticleVideoElement\n | ArticleCustomElement;\n\n/**\n * Configuración del artículo completo\n */\nexport interface ArticleMetadata {\n /** Elementos del artículo */\n elements: ArticleElement[];\n /** Configuración de espaciado global */\n defaultSpacing?: ArticleSpacing;\n /** Ancho máximo del artículo */\n maxWidth?: string;\n /** Centrar el artículo */\n centered?: boolean;\n /** Tema del artículo */\n theme?: 'light' | 'dark' | 'auto';\n /** Clases CSS adicionales */\n cssClass?: string;\n}\n\n/**\n * Configuración de espaciado predefinida\n */\nexport const ARTICLE_SPACING = {\n NONE: { top: 'none', bottom: 'none' } as ArticleSpacing,\n SMALL: { top: 'small', bottom: 'small' } as ArticleSpacing,\n MEDIUM: { top: 'medium', bottom: 'medium' } as ArticleSpacing,\n LARGE: { top: 'large', bottom: 'large' } as ArticleSpacing,\n XLARGE: { top: 'xlarge', bottom: 'xlarge' } as ArticleSpacing,\n\n // Espaciados específicos para elementos\n TITLE: { top: 'large', bottom: 'medium' } as ArticleSpacing,\n SUBTITLE: { top: 'medium', bottom: 'small' } as ArticleSpacing,\n PARAGRAPH: { top: 'small', bottom: 'medium' } as ArticleSpacing,\n QUOTE: { top: 'medium', bottom: 'medium' } as ArticleSpacing,\n CODE: { top: 'medium', bottom: 'medium' } as ArticleSpacing,\n LIST: { top: 'small', bottom: 'medium' } as ArticleSpacing,\n BUTTON: { top: 'medium', bottom: 'medium' } as ArticleSpacing,\n IMAGE: { top: 'large', bottom: 'large' } as ArticleSpacing,\n SEPARATOR: { top: 'large', bottom: 'large' } as ArticleSpacing,\n} as const;\n\n/**\n * Función helper para crear elementos de artículo de forma fácil\n */\nexport class ArticleBuilder {\n private elements: ArticleElement[] = [];\n\n /**\n * Añade un título al artículo\n */\n title(props: TitleMetadata, options?: Partial<BaseArticleElement>): ArticleBuilder {\n this.elements.push({\n type: 'title',\n props,\n spacing: ARTICLE_SPACING.TITLE,\n ...options,\n } as ArticleTitleElement);\n return this;\n }\n\n /**\n * Añade un subtítulo al artículo\n */\n subtitle(props: TitleMetadata, options?: Partial<BaseArticleElement>): ArticleBuilder {\n this.elements.push({\n type: 'subtitle',\n props,\n spacing: ARTICLE_SPACING.SUBTITLE,\n ...options,\n } as ArticleSubtitleElement);\n return this;\n }\n\n /**\n * Añade un párrafo al artículo\n */\n paragraph(props: TextMetadata, options?: Partial<BaseArticleElement>): ArticleBuilder {\n this.elements.push({\n type: 'paragraph',\n props,\n spacing: ARTICLE_SPACING.PARAGRAPH,\n ...options,\n } as ArticleTextElement);\n return this;\n }\n\n /**\n * Añade una cita al artículo\n */\n quote(\n props: ArticleQuoteElement['props'],\n options?: Partial<BaseArticleElement>\n ): ArticleBuilder {\n this.elements.push({\n type: 'quote',\n props,\n spacing: ARTICLE_SPACING.QUOTE,\n ...options,\n } as ArticleQuoteElement);\n return this;\n }\n\n /**\n * Añade código al artículo\n */\n code(code: string, language?: string, options?: Partial<BaseArticleElement>): ArticleBuilder {\n this.elements.push({\n type: 'code',\n props: { code, language },\n spacing: ARTICLE_SPACING.CODE,\n ...options,\n } as ArticleCodeElement);\n return this;\n }\n\n /**\n * Añade una lista al artículo\n */\n list(\n items: ArticleListElement['props']['items'],\n listType?: ArticleListElement['props']['listType'],\n options?: Partial<BaseArticleElement>\n ): ArticleBuilder {\n this.elements.push({\n type: 'list',\n props: { items, listType },\n spacing: ARTICLE_SPACING.LIST,\n ...options,\n } as ArticleListElement);\n return this;\n }\n\n /**\n * Añade un botón al artículo\n */\n button(\n props: ButtonMetadata,\n alignment?: 'left' | 'center' | 'right',\n options?: Partial<BaseArticleElement>\n ): ArticleBuilder {\n this.elements.push({\n type: 'button',\n props: { ...props, alignment },\n spacing: ARTICLE_SPACING.BUTTON,\n ...options,\n } as ArticleButtonElement);\n return this;\n }\n\n /**\n * Añade un separador al artículo\n */\n separator(\n style?: 'line' | 'dots' | 'space',\n options?: Partial<BaseArticleElement>\n ): ArticleBuilder {\n this.elements.push({\n type: 'separator',\n props: { style },\n spacing: ARTICLE_SPACING.SEPARATOR,\n ...options,\n } as ArticleSeparatorElement);\n return this;\n }\n\n /**\n * Añade una imagen al artículo\n */\n image(\n src: string,\n alt: string,\n caption?: string,\n options?: Partial<BaseArticleElement>\n ): ArticleBuilder {\n this.elements.push({\n type: 'image',\n props: { src, alt, caption },\n spacing: ARTICLE_SPACING.IMAGE,\n ...options,\n } as ArticleImageElement);\n return this;\n }\n\n /**\n * Construye el artículo final\n */\n build(config?: Partial<ArticleMetadata>): ArticleMetadata {\n return {\n elements: this.elements,\n defaultSpacing: ARTICLE_SPACING.MEDIUM,\n maxWidth: '800px',\n centered: true,\n theme: 'auto',\n ...config,\n };\n }\n\n /**\n * Resetea el builder para crear un nuevo artículo\n */\n clear(): ArticleBuilder {\n this.elements = [];\n return this;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { BoxComponent } from '../../atoms/box/box.component';\nimport { ButtonGroupComponent } from '../../molecules/button-group/button-group.component';\nimport { TitleBlockComponent } from '../../molecules/title-block/title-block.component';\nimport { BannerMetadata } from './types';\n\n@Component({\n selector: 'val-banner',\n standalone: true,\n imports: [CommonModule, BoxComponent, TitleBlockComponent, ButtonGroupComponent],\n template: `\n <val-box\n [props]=\"{\n icon: props.closable ? 'close-outline' : '',\n bordered: props.bordered,\n color: '',\n padding: props.padding,\n }\"\n (onClick)=\"closeHandler()\"\n >\n <div [ngClass]=\"['content-container', props.mode, props.alignment]\" body>\n <val-title-block\n [props]=\"{\n position: props.content.position,\n aboveTitle: props.content.aboveTitle,\n title: props.content.title,\n bellowTitle: props.content.bellowTitle,\n }\"\n ></val-title-block>\n @if (props.actions) {\n <val-button-group\n [ngClass]=\"['buttons-container', props.mode, props.alignment]\"\n [props]=\"props.actions\"\n (onClick)=\"clickHandler($event)\"\n ></val-button-group>\n }\n </div>\n </val-box>\n `,\n styleUrls: ['./banner.component.scss'],\n})\n/**\n * val-banner\n *\n * Displays a banner with title block, actions, and optional close button.\n *\n * @example\n * <val-banner [props]=\"{ content: {...}, actions: {...}, closable: true, bordered: true, mode: 'center', alignment: 'center', padding: '8px' }\" (onClick)=\"handler($event)\" (onClose)=\"closeHandler()\"></val-banner>\n *\n * @input props: BannerMetadata - Configuration for the banner (content, actions, closable, bordered, mode, alignment, padding)\n * @output onClick - Emits when an action is clicked\n * @output onClose - Emits when the banner is closed\n */\nexport class BannerComponent implements OnInit, OnChanges {\n @Input()\n props: BannerMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n @Output()\n onClose = new EventEmitter();\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n // Forzar detección de cambios múltiple\n this.cdr.detectChanges();\n setTimeout(() => {\n this.cdr.detectChanges();\n }, 0);\n }\n }\n\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n\n closeHandler() {\n this.onClose.emit();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport {\n IonButton,\n IonButtons,\n IonIcon,\n IonMenuButton,\n IonText,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport { addIcons } from 'ionicons';\nimport { chevronBackOutline } from 'ionicons/icons';\nimport { IconService } from '../../../services/icons.service';\nimport { AvatarComponent } from '../../atoms/avatar/avatar.component';\nimport { ImageComponent } from '../../atoms/image/image.component';\nimport { ToolbarAction, ToolbarActionType } from '../../types';\nimport { ToolbarMetadata } from './types';\n\n/**\n * ToolbarComponent\n *\n * Componente de barra de herramientas reutilizable para encabezados y pies de página.\n * Permite acciones, botón de retroceso, menú y personalización de colores y título.\n *\n * @example\n * <val-toolbar [props]=\"{ title: 'Mi App', withBack: true, actions: [...] }\" (onClick)=\"handleToolbarAction($event)\"></val-toolbar>\n *\n * @input props {ToolbarMetadata} - Metadatos de la barra de herramientas.\n * @output onClick - Emite el token de la acción clicada.\n */\n@Component({\n selector: 'val-toolbar',\n standalone: true,\n imports: [\n CommonModule,\n IonToolbar,\n IonButtons,\n IonButton,\n IonIcon,\n IonText,\n IonTitle,\n AvatarComponent,\n ImageComponent,\n IonMenuButton,\n ],\n template: `\n <ion-toolbar [color]=\"props.color\" [class.background]=\"props.color === 'background'\">\n <ng-container *ngIf=\"props.withBack\">\n <ion-buttons class=\"left-buttons\" slot=\"start\" *ngIf=\"props.withBack\">\n <ion-button fill=\"clear\" (click)=\"goBack()\" [color]=\"props.textColor\" style=\"margin-left: 8px;\">\n <ion-icon name=\"chevron-back-outline\" [slot]=\"props.backText ? 'start' : 'icon-only'\"></ion-icon>\n <ion-text *ngIf=\"props.backText\">{{ props.backText }}</ion-text>\n </ion-button>\n </ion-buttons>\n </ng-container>\n <ng-container *ngIf=\"props.withActions\">\n <ion-buttons slot=\"end\" *ngIf=\"someInRight() || props.withMenu\">\n <ng-container *ngFor=\"let action of rightActions()\">\n <ion-button *ngIf=\"action.type === actionTypes.ICON\" (click)=\"clickHandler(action.token)\">\n <ion-icon slot=\"icon-only\" [name]=\"action.description\" [color]=\"props.textColor\"></ion-icon>\n </ion-button>\n <val-avatar\n *ngIf=\"action.type === actionTypes.AVATAR\"\n [props]=\"{ size: 'small', image: action.description, default: '' }\"\n (onClick)=\"clickHandler(action.token)\"\n ></val-avatar>\n <val-image\n *ngIf=\"action.type === actionTypes.IMAGE\"\n [props]=\"action.image\"\n (click)=\"clickHandler(action.token)\"\n ></val-image>\n <ion-button\n [color]=\"props.textColor\"\n *ngIf=\"action.type === actionTypes.BUTTON\"\n (click)=\"clickHandler(action.token)\"\n >{{ action.description }}</ion-button\n >\n </ng-container>\n @if (props.withMenu) {\n <ion-menu-button color=\"dark\"></ion-menu-button>\n }\n </ion-buttons>\n <ion-buttons slot=\"start\" *ngIf=\"someInLeft()\" style=\"padding-left: 4px;\">\n <ng-container *ngFor=\"let action of leftActions()\">\n <ion-button *ngIf=\"action.type === actionTypes.ICON\" (click)=\"clickHandler(action.token)\">\n <ion-icon slot=\"icon-only\" [name]=\"action.description\" [color]=\"props.textColor\"></ion-icon>\n </ion-button>\n <val-avatar\n *ngIf=\"action.type === actionTypes.AVATAR\"\n [props]=\"{ size: 'small', image: action.description, default: '' }\"\n (onClick)=\"clickHandler(action.token)\"\n ></val-avatar>\n <val-image\n *ngIf=\"action.type === actionTypes.IMAGE\"\n [props]=\"action.image\"\n (click)=\"clickHandler(action.token)\"\n ></val-image>\n <ion-button *ngIf=\"action.type === actionTypes.BUTTON\" (click)=\"clickHandler(action.token)\">{{\n action.description\n }}</ion-button>\n </ng-container>\n </ion-buttons>\n </ng-container>\n <ion-title *ngIf=\"props.title\" [color]=\"props.textColor\">{{ props.title }}</ion-title>\n <!-- experimental -->\n <ng-content select=\"[toolbar-bottom]\"></ng-content>\n </ion-toolbar>\n `,\n styleUrls: ['./toolbar.component.scss'],\n})\nexport class ToolbarComponent implements OnInit {\n /**\n * Metadatos de la barra de herramientas.\n */\n @Input()\n props: ToolbarMetadata;\n\n /**\n * Evento emitido al hacer click en una acción o botón de la barra.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n actionTypes = ToolbarActionType;\n\n constructor(\n private navCtrl: NavController,\n icon: IconService\n ) {\n addIcons({ chevronBackOutline });\n }\n\n ngOnInit() {}\n\n /**\n * Emite el token de la acción clicada.\n * @param token Token de la acción\n */\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n\n /**\n * Navega hacia atrás usando NavController.\n */\n goBack() {\n this.navCtrl.back();\n }\n\n /**\n * Determina si hay acciones a la derecha.\n */\n someInRight(): boolean {\n return !!this.props.actions.find(x => x.position === 'right');\n }\n\n /**\n * Determina si hay acciones a la izquierda.\n */\n someInLeft(): boolean {\n return !!this.props.actions.find(x => x.position === 'left');\n }\n\n /**\n * Devuelve las acciones de la derecha.\n */\n rightActions(): ToolbarAction[] {\n return this.props.actions.filter(x => x.position === 'right');\n }\n\n /**\n * Devuelve las acciones de la izquierda.\n */\n leftActions(): ToolbarAction[] {\n return this.props.actions.filter(x => x.position === 'left');\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IonFooter } from '@ionic/angular/standalone';\nimport { ToolbarComponent } from '../toolbar/toolbar.component';\nimport { FooterMetadata } from './types';\n\n/**\n * FooterComponent\n *\n * Componente de pie de página reutilizable para aplicaciones Ionic/Angular.\n * Permite mostrar una barra de herramientas (toolbar) y contenido adicional.\n *\n * @example\n * <val-footer [props]=\"footerProps\" (onClick)=\"handleFooterAction($event)\">\n * <div extra>Contenido extra</div>\n * </val-footer>\n *\n * @input props {FooterMetadata} - Metadatos del pie de página y su toolbar.\n * @output onClick - Emite el token de la acción clicada en la toolbar.\n */\n@Component({\n selector: 'val-footer',\n standalone: true,\n imports: [CommonModule, IonFooter, ToolbarComponent],\n template: `\n <ion-footer\n [class.ion-no-border]=\"!props.bordered\"\n [translucent]=\"props.translucent\"\n [class.background]=\"props.toolbar.color === 'background'\"\n >\n <val-toolbar\n *ngIf=\"props.toolbar.title || props.toolbar.withActions || props.toolbar.withBack\"\n [props]=\"props.toolbar\"\n (onClick)=\"clickHandler($event)\"\n ></val-toolbar>\n <ng-content select=\"[extra]\"></ng-content>\n </ion-footer>\n `,\n styleUrls: ['./footer.component.scss'],\n})\nexport class FooterComponent implements OnInit {\n /**\n * Metadatos del pie de página y su toolbar.\n */\n @Input()\n props: FooterMetadata;\n\n /**\n * Evento emitido al hacer click en una acción de la toolbar.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor() {}\n\n ngOnInit() {}\n\n /**\n * Emite el token de la acción clicada en la toolbar.\n * @param token Token de la acción\n */\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n}\n","import { ValidatorFn, Validators } from '@angular/forms';\nimport { ComponentStates, InputMetadata, InputType } from '../../types';\n\nexport const maxLength = (\n field: string,\n max: number\n): { validator: ValidatorFn; error: string } => {\n return {\n validator: Validators.maxLength(max),\n error: `El campo ${field} no debe superar los ${max} caracteres.`,\n };\n};\n\nexport const createNumberFromToField = (\n name: string,\n label: string,\n fromLabel: string,\n toLabel: string,\n options?: {\n fromPlaceholder?: string;\n toPlaceholder?: string;\n hint?: string;\n range?: { min: number; max: number };\n validators?: ValidatorFn[];\n order?: number;\n }\n): InputMetadata => {\n return {\n control: null as any, // Will be set by form component\n token: `number-from-to-${name}`,\n label,\n name,\n hint: options?.hint || '',\n placeholder: '',\n type: InputType.NUMBER_FROM_TO,\n order: options?.order || 0,\n validators: options?.validators || [],\n range: options?.range,\n errors: {},\n state: ComponentStates.ENABLED,\n fromLabel,\n toLabel,\n fromPlaceholder: options?.fromPlaceholder,\n toPlaceholder: options?.toPlaceholder,\n };\n};\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { ButtonGroupComponent } from '../../../molecules/button-group/button-group.component';\nimport { ButtonMetadata, ComponentStates, FormMetadata, FormSubmit } from '../../../types';\nimport { FooterComponent } from '../../footer/footer.component';\n\n@Component({\n selector: 'val-form-footer',\n standalone: true,\n imports: [FooterComponent, ButtonGroupComponent],\n template: `\n <val-footer\n [props]=\"{\n bordered: false,\n translucent: false,\n toolbar: {\n title: '',\n actions: [],\n color: 'background',\n withBack: false,\n withActions: false,\n },\n }\"\n >\n <val-button-group\n extra\n [props]=\"{ buttons: actions, position: 'center', columned: false }\"\n (onClick)=\"submitHandler($event)\"\n ></val-button-group>\n </val-footer>\n `,\n styleUrls: ['./form-footer.component.scss'],\n})\nexport class FormFooterComponent implements OnInit {\n @Input()\n props: { form: FormGroup; data: FormMetadata };\n\n @Output()\n onSubmit = new EventEmitter<FormSubmit>();\n\n constructor() {}\n\n ngOnInit() {}\n\n async submitHandler(token?: string) {\n this.onSubmit.emit({ fields: this.props.form.value, token });\n }\n\n get actions(): ButtonMetadata[] {\n if (!this.props.form) {\n return [];\n }\n\n if (this.props.form.valid) {\n this.props.data.actions.state = ComponentStates.ENABLED;\n }\n\n if (this.props.data.state === ComponentStates.WORKING) {\n this.props.data.actions.state = ComponentStates.WORKING;\n }\n\n if (this.props.data.state === ComponentStates.ENABLED) {\n this.props.data.actions.state = ComponentStates.ENABLED;\n }\n\n if (this.props.data.state === ComponentStates.DISABLED) {\n this.props.data.actions.state = ComponentStates.DISABLED;\n }\n\n return [this.props.data.actions];\n }\n}\n","import { ElementRef } from '@angular/core';\n\n/**\n * Scrolls smoothly to the top of the element with the given id.\n * @param id The id of the element to scroll to\n */\nexport const goToTop = (id: string): void => {\n const element = document.getElementById(id);\n if (element) {\n element.scrollIntoView({\n block: 'start',\n inline: 'nearest',\n behavior: 'smooth',\n });\n }\n};\n\n/**\n * Checks if the bottom of the given ElementRef is within the viewport.\n * Useful for determining if a form or element is fully visible.\n * @param elementRef The Angular ElementRef to check\n * @returns True if the element's bottom is at or above the window's bottom\n */\nexport const isAtEnd = (elementRef: ElementRef): boolean => {\n const formElement = elementRef.nativeElement;\n const rect = formElement.getBoundingClientRect();\n const windowHeight = window.innerHeight;\n return rect.bottom <= windowHeight;\n};\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { IonicModule, IonModal } from '@ionic/angular';\nimport { Subscription } from 'rxjs';\nimport { IconService } from '../../../services/icons.service';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { replaceSpecialChars } from '../../../shared/utils/text';\nimport { InputMetadata, InputOption } from '../../types';\nimport { SearchbarComponent } from '../searchbar/searchbar.component';\n\n@Component({\n selector: 'val-multi-select-search',\n standalone: true,\n imports: [CommonModule, IonicModule, FormsModule, SearchbarComponent, ReactiveFormsModule],\n template: `\n <ion-input\n type=\"text\"\n [value]=\"displayValue\"\n [placeholder]=\"props?.placeholder || placeholder\"\n readonly\n (mousedown)=\"preventDefaultBehavior($event)\"\n />\n\n <ion-input style=\"position: absolute;\" [formControl]=\"props.control\" type=\"hidden\"></ion-input>\n\n <ion-modal\n #modal\n trigger=\"open-modal\"\n [initialBreakpoint]=\"1\"\n [breakpoints]=\"[0, 0.5, 0.75, 1]\"\n (didDismiss)=\"cancelModal()\"\n >\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-title>{{ label }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"cancelModal()\">Cerrar</ion-button>\n </ion-buttons>\n </ion-toolbar>\n <ion-toolbar>\n <val-searchbar (filterEvent)=\"onFilter($event)\" (focusEvent)=\"onFocus()\" (blurEvent)=\"onBlur()\" />\n </ion-toolbar>\n </ion-header>\n <ion-content>\n <!-- Action buttons for multi-select -->\n <div class=\"actions-container\" style=\"padding: 16px; border-bottom: 1px solid var(--ion-color-light-shade);\">\n <ion-button \n fill=\"clear\" \n size=\"small\" \n (click)=\"selectAll()\"\n [disabled]=\"filteredItems.length === 0\"\n >\n Seleccionar todos\n </ion-button>\n <ion-button \n fill=\"clear\" \n size=\"small\" \n color=\"medium\" \n (click)=\"clearAll()\"\n [disabled]=\"selectedItems.length === 0\"\n >\n Limpiar\n </ion-button>\n </div>\n\n <ion-list>\n <ion-item *ngFor=\"let item of filteredItems\" button (click)=\"selectItem(item)\" detail=\"false\">\n <ion-checkbox\n slot=\"start\"\n [checked]=\"isItemSelected(item)\"\n ></ion-checkbox>\n <ion-label>{{ item[labelProperty] }}</ion-label>\n </ion-item>\n <ion-item *ngIf=\"filteredItems.length === 0\" lines=\"none\">\n <ion-label color=\"dark\">No se encontraron resultados</ion-label>\n </ion-item>\n </ion-list>\n </ion-content>\n <ion-footer>\n <ion-toolbar>\n <ion-button expand=\"full\" (click)=\"applyAndClose()\">\n Aplicar\n </ion-button>\n </ion-toolbar>\n </ion-footer>\n </ng-template>\n </ion-modal>\n `,\n styles: [\n `\n ion-header {\n padding: 8px 8px 0px 8px;\n }\n .actions-container {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n `,\n ],\n})\nexport class MultiSelectSearchComponent implements OnChanges, OnDestroy {\n @ViewChild('modal') modal!: IonModal;\n\n @Input() label: string;\n @Input() labelProperty: string = 'name';\n @Input() valueProperty: string = 'id';\n @Input() placeholder: string;\n\n private langService = inject(LangService);\n\n constructor() {\n this.label = this.langService.getText('_global', 'selectOptions', 'Seleccionar opciones');\n this.placeholder = this.langService.getText('_global', 'selectOptions', 'Seleccione opciones');\n }\n\n @Input() props: InputMetadata;\n\n icon = inject(IconService);\n private changeDetector = inject(ChangeDetectorRef);\n\n searchTerm: string = '';\n filteredItems: InputOption[] = [];\n selectedItems: InputOption[] = [];\n displayValue: string = '';\n\n private previousOptions: any[] = [];\n private isProcessingChanges = false;\n private valueChangesSubscription?: Subscription;\n\n ngOnInit() {\n this.applyDefaultValue();\n this.initializeItems();\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n this.subscribeToValueChanges();\n }\n\n ngOnDestroy() {\n // Limpiar suscripciones para evitar memory leaks\n if (this.valueChangesSubscription) {\n this.valueChangesSubscription.unsubscribe();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // Evitar bucles infinitos\n if (this.isProcessingChanges) {\n return;\n }\n\n // Cuando cambia props o props.options\n if (changes['props']) {\n try {\n this.isProcessingChanges = true;\n\n // Desuscribirse del antiguo control si existe\n if (this.valueChangesSubscription) {\n this.valueChangesSubscription.unsubscribe();\n }\n\n if (this.props?.options) {\n // Verificar si las opciones han cambiado realmente\n const optionsChanged = !this.areOptionsEqual(this.previousOptions, this.props.options);\n\n if (optionsChanged) {\n this.previousOptions = [...this.props.options];\n this.initializeItems();\n }\n }\n\n // Sincronizar con el nuevo control si existe\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n\n // Suscribirse al nuevo control\n this.subscribeToValueChanges();\n } finally {\n this.isProcessingChanges = false;\n }\n }\n }\n\n ionViewWillEnter(): void {\n if (this.isProcessingChanges) {\n return;\n }\n\n try {\n this.isProcessingChanges = true;\n this.initializeItems();\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n this.subscribeToValueChanges();\n } finally {\n this.isProcessingChanges = false;\n }\n }\n\n // Suscribirse a cambios en el FormControl\n private subscribeToValueChanges() {\n if (!this.props?.control) return;\n\n this.valueChangesSubscription = this.props.control.valueChanges.subscribe(value => {\n if (this.isProcessingChanges) return;\n\n try {\n this.isProcessingChanges = true;\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n } finally {\n this.isProcessingChanges = false;\n }\n });\n }\n\n // Compara si dos arrays de opciones son iguales\n private areOptionsEqual(prevOptions: any[], newOptions: any[]): boolean {\n if (prevOptions === newOptions) return true;\n if (!prevOptions || !newOptions) return prevOptions === newOptions;\n if (prevOptions.length !== newOptions.length) return false;\n for (let i = 0; i < prevOptions.length; i++) {\n if (prevOptions[i][this.valueProperty] !== newOptions[i][this.valueProperty]) {\n return false;\n }\n }\n return true;\n }\n\n private initializeItems(): void {\n this.filteredItems = this.props?.options || [];\n }\n\n private syncControlValueWithSelectedItems(): void {\n if (!this.props?.control) {\n this.selectedItems = [];\n return;\n }\n const controlValue = this.props.control.value;\n if (controlValue === null || controlValue === undefined || controlValue === '') {\n this.selectedItems = [];\n return;\n }\n\n // Parse comma-separated values for multi-select\n const values = typeof controlValue === 'string' \n ? controlValue.split(',').map(v => v.trim()).filter(v => v !== '')\n : Array.isArray(controlValue) ? controlValue : [controlValue];\n\n if (this.props.options && this.props.options.length > 0) {\n const map = new Map(this.props.options.map(opt => [String(opt[this.valueProperty]), opt]));\n this.selectedItems = values.map(val => map.get(String(val))).filter(Boolean);\n } else {\n this.selectedItems = [];\n }\n }\n\n private applyDefaultValue(): void {\n applyDefaultValueToControl(this.props);\n }\n\n onFilter(event) {\n // If no search term, show all options\n if (!event || event.trim() === '') {\n this.filteredItems = this.props?.options ? [...this.props.options] : [];\n this.changeDetector.detectChanges();\n return;\n }\n\n // If no options, nothing to filter\n if (!this.props?.options || this.props.options.length === 0) {\n this.filteredItems = [];\n this.changeDetector.detectChanges();\n return;\n }\n\n const search = replaceSpecialChars(event.toLowerCase());\n this.filteredItems = this.props.options.filter(element => {\n const label = element[this.labelProperty]\n ? replaceSpecialChars(String(element[this.labelProperty]).toLowerCase())\n : '';\n const value = element[this.valueProperty]\n ? replaceSpecialChars(String(element[this.valueProperty]).toLowerCase())\n : '';\n return label.includes(search) || value.includes(search);\n });\n this.changeDetector.detectChanges();\n }\n\n onFocus() {\n console.log('onFocus');\n }\n\n onBlur() {\n console.log('onBlur');\n }\n\n openModal() {\n if (this.modal) {\n this.modal.present();\n }\n }\n\n preventDefaultBehavior(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.openModal();\n }\n\n cancelModal() {\n // Reset filter and show all options when closing modal\n this.searchTerm = '';\n this.filteredItems = this.props?.options ? [...this.props.options] : [];\n this.changeDetector.detectChanges();\n if (this.modal) {\n this.modal.dismiss();\n }\n }\n\n selectItem(item: any) {\n // Multi-select logic: toggle selection\n const index = this.selectedItems.findIndex(\n selectedItem => selectedItem[this.valueProperty] === item[this.valueProperty]\n );\n\n if (index === -1) {\n // Add to selection\n this.selectedItems.push(item);\n } else {\n // Remove from selection\n this.selectedItems.splice(index, 1);\n }\n\n this.updateDisplayValue();\n this.applyChanges();\n }\n\n selectAll(): void {\n // Add all filtered items that aren't already selected\n this.filteredItems.forEach(item => {\n const isAlreadySelected = this.selectedItems.some(\n selectedItem => selectedItem[this.valueProperty] === item[this.valueProperty]\n );\n if (!isAlreadySelected) {\n this.selectedItems.push(item);\n }\n });\n\n this.updateDisplayValue();\n this.applyChanges();\n }\n\n clearAll(): void {\n this.selectedItems = [];\n this.updateDisplayValue();\n this.applyChanges();\n }\n\n isItemSelected(item: any): boolean {\n return this.selectedItems.some(selectedItem => selectedItem[this.valueProperty] === item[this.valueProperty]);\n }\n\n updateDisplayValue() {\n if (this.selectedItems.length === 0) {\n this.displayValue = '';\n return;\n }\n\n if (this.selectedItems.length === 1) {\n this.displayValue = this.selectedItems[0][this.labelProperty];\n } else {\n this.displayValue = `${this.selectedItems.length} elementos seleccionados`;\n }\n }\n\n applyChanges() {\n if (!this.props?.control) {\n return;\n }\n\n try {\n this.isProcessingChanges = true;\n\n // Convert selected items to comma-separated string of values\n const selectedValues = this.selectedItems.map(item => String(item[this.valueProperty]));\n const value = selectedValues.join(',');\n\n this.props.control.setValue(value);\n this.props.control.markAsDirty();\n this.props.control.updateValueAndValidity();\n } finally {\n this.isProcessingChanges = false;\n }\n }\n\n applyAndClose() {\n this.applyChanges();\n this.cancelModal();\n }\n\n // Método público para reiniciar el componente\n reset() {\n this.selectedItems = [];\n this.displayValue = '';\n if (this.props?.control) {\n this.props.control.setValue('');\n }\n this.changeDetector.detectChanges();\n }\n}","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { isAtEnd } from '../../../shared/utils/dom';\nimport { DisplayComponent } from '../../atoms/display/display.component';\nimport { DividerComponent } from '../../atoms/divider/divider.component';\nimport { TitleComponent } from '../../atoms/title/title.component';\nimport { ButtonGroupComponent } from '../../molecules/button-group/button-group.component';\nimport { CheckInputComponent } from '../../molecules/check-input/check-input.component';\nimport { CommentInputComponent } from '../../molecules/comment-input/comment-input.component';\nimport { DateInputComponent } from '../../molecules/date-input/date-input.component';\nimport { EmailInputComponent } from '../../molecules/email-input/email-input.component';\nimport { FileInputComponent } from '../../molecules/file-input/file-input.component';\nimport { HintComponent } from '../../molecules/hint/hint.component';\nimport { HourInputComponent } from '../../molecules/hour-input/hour-input.component';\nimport { NumberInputComponent } from '../../molecules/number-input/number-input.component';\nimport { NumberFromToComponent } from '../../molecules/number-from-to/number-from-to.component';\nimport { PasswordInputComponent } from '../../molecules/password-input/password-input.component';\nimport { PinInputComponent } from '../../molecules/pin-input/pin-input.component';\nimport { RadioInputComponent } from '../../molecules/radio-input/radio-input.component';\nimport { SearchSelectorComponent } from '../../molecules/select-input/select-input.component';\nimport { SelectSearchComponent } from '../../molecules/select-search/select-search.component';\nimport { MultiSelectSearchComponent } from '../../molecules/multi-select-search/multi-select-search.component';\nimport { TextInputComponent } from '../../molecules/text-input/text-input.component';\nimport { ButtonMetadata, ComponentStates, FormMetadata, FormSubmit, InputMetadata, InputType } from '../../types';\n\n@Component({\n selector: 'val-form',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n DisplayComponent,\n TitleComponent,\n TextInputComponent,\n CheckInputComponent,\n ButtonGroupComponent,\n DividerComponent,\n HintComponent,\n CommentInputComponent,\n DateInputComponent,\n FileInputComponent,\n HourInputComponent,\n EmailInputComponent,\n NumberInputComponent,\n NumberFromToComponent,\n RadioInputComponent,\n PasswordInputComponent,\n PinInputComponent,\n SelectSearchComponent,\n MultiSelectSearchComponent,\n SearchSelectorComponent,\n ],\n template: `\n <div class=\"container\">\n <form [formGroup]=\"form\">\n <val-display\n *ngIf=\"props.name\"\n [props]=\"{\n content: props.name,\n color: 'dark',\n size: 'large',\n }\"\n ></val-display>\n <div class=\"section\" *ngFor=\"let s of props.sections\">\n <val-title [props]=\"{ content: s.name, size: 'large', color: '', bold: false }\"></val-title>\n <div class=\"input\" *ngFor=\"let f of s.fields\">\n <val-title [props]=\"{ content: f.label, size: 'small', color: 'dark', bold: false }\"></val-title>\n <ng-container *ngIf=\"f.type === types.TEXT\">\n <val-text-input [props]=\"getFieldProp(f)\"></val-text-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.CHECK\">\n <val-check-input></val-check-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.COMMENT\">\n <val-comment-input [props]=\"getFieldProp(f)\"></val-comment-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.DATE\">\n <val-date-input [props]=\"getFieldProp(f)\"></val-date-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.EMAIL\">\n <val-email-input [props]=\"getFieldProp(f)\"></val-email-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.FILE\">\n <val-file-input [props]=\"getFieldProp(f)\"></val-file-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.HOUR\">\n <val-hour-input [props]=\"getFieldProp(f)\"></val-hour-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.NUMBER\">\n <val-number-input [props]=\"getFieldProp(f)\"></val-number-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.NUMBER_FROM_TO\">\n <val-number-from-to [props]=\"getFieldProp(f)\"></val-number-from-to>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.PASSWORD\">\n <val-password-input [props]=\"getFieldProp(f)\"></val-password-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.PIN_CODE\">\n <val-pin-input [props]=\"getFieldProp(f)\"></val-pin-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.RADIO\">\n <val-radio-input [props]=\"getFieldProp(f)\"></val-radio-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.SELECT\">\n <val-select-input [props]=\"getFieldProp(f)\"></val-select-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.SEARCH_SELECT\">\n <val-select-search [props]=\"getFieldProp(f)\"></val-select-search>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.MULTI_SELECT\">\n <val-multi-select-search [props]=\"getFieldProp(f)\"></val-multi-select-search>\n </ng-container>\n <val-hint [props]=\"getFieldProp(f)\"></val-hint>\n </div>\n <val-divider [props]=\"{ fill: 'solid', size: 'medium', color: 'medium' }\"></val-divider>\n <ng-content></ng-content>\n </div>\n <val-button-group\n [props]=\"{ buttons: actions, position: 'center', columned: false }\"\n (onClick)=\"submitHandler($event)\"\n ></val-button-group>\n </form>\n </div>\n `,\n styleUrls: ['./form.component.scss'],\n})\nexport class FormComponent implements OnInit {\n @Input()\n props: FormMetadata;\n\n @Output()\n onSubmit = new EventEmitter<FormSubmit>();\n\n @Output()\n onInvalid = new EventEmitter();\n\n @Output()\n onSelectChange = new EventEmitter<{ field: string; value: any }>();\n\n form: FormGroup;\n types = InputType;\n private subscriptions: Subscription[] = [];\n\n constructor(\n private fb: FormBuilder,\n private elementRef: ElementRef\n ) {}\n\n ngOnInit() {\n const formControls = {};\n this.props.sections.forEach(section => {\n section.fields.forEach(field => {\n if (field.type === this.types.NUMBER_FROM_TO) {\n // Crear dos controles para campos NUMBER_FROM_TO\n formControls[`${field.name}_from`] = [undefined, field.validators || []];\n formControls[`${field.name}_to`] = [undefined, field.validators || []];\n } else {\n formControls[field.name] = [undefined, field.validators || []];\n }\n });\n });\n this.form = this.fb.group(formControls);\n this.props.sections.forEach(section => {\n section.fields\n .filter(\n x =>\n x.type === this.types.SELECT ||\n x.type === this.types.TEXT ||\n x.type === this.types.SEARCH_SELECT ||\n x.type === this.types.MULTI_SELECT\n )\n .forEach(field => {\n this.trackSelectChanges(field.name);\n });\n });\n }\n\n ngOnDestroy() {\n // Cleanup subscriptions to avoid memory leaks\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n trackSelectChanges(fieldName: string) {\n const control = this.getControl(fieldName);\n const subscription = control.valueChanges.subscribe(value => {\n this.onSelectChange.emit({ field: fieldName, value });\n });\n this.subscriptions.push(subscription);\n }\n\n async submitHandler(token?: string) {\n this.onSubmit.emit({ fields: this.form.getRawValue(), token });\n }\n\n getControl(field: string): FormControl {\n return this.Form.get(field) as FormControl;\n }\n\n getFieldProp(field: InputMetadata): InputMetadata {\n field.token;\n if (!field.token) {\n field.token = `input-${field.type}-${field.name}`;\n }\n\n if (field.type === this.types.NUMBER_FROM_TO) {\n const fromControl = this.getControl(`${field.name}_from`);\n const toControl = this.getControl(`${field.name}_to`);\n\n if (field.state === ComponentStates.DISABLED) {\n fromControl.disable();\n toControl.disable();\n } else {\n fromControl.enable();\n toControl.enable();\n }\n\n return {\n ...field,\n fromControl,\n toControl,\n control: undefined, // Remove control for NUMBER_FROM_TO fields\n };\n } else {\n const control = this.getControl(field.name);\n if (field.state === ComponentStates.DISABLED) {\n control.disable();\n } else {\n control.enable();\n }\n return {\n ...field,\n control,\n };\n }\n }\n\n get isAtEndOfForm(): boolean {\n return isAtEnd(this.elementRef);\n }\n\n get Form(): FormGroup {\n return this.form;\n }\n\n get FormState(): { form: FormGroup; data: FormMetadata } {\n return {\n form: this.Form,\n data: this.props,\n };\n }\n\n get actions(): ButtonMetadata[] {\n if (!this.form) {\n return [];\n }\n\n if (this.form.valid) {\n this.props.actions.state = ComponentStates.ENABLED;\n }\n\n if (this.props.state === ComponentStates.WORKING) {\n this.props.actions.state = ComponentStates.WORKING;\n }\n\n if (this.props.state === ComponentStates.ENABLED) {\n this.props.actions.state = ComponentStates.ENABLED;\n }\n\n if (this.props.state === ComponentStates.DISABLED) {\n this.props.actions.state = ComponentStates.DISABLED;\n }\n\n return [this.props.actions];\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IonHeader } from '@ionic/angular/standalone';\nimport { ToolbarComponent } from '../toolbar/toolbar.component';\nimport { HeaderMetadata } from './types';\n\n@Component({\n selector: 'val-header',\n standalone: true,\n imports: [IonHeader, ToolbarComponent],\n template: `\n <ion-header [class.ion-no-border]=\"!props.bordered\" [translucent]=\"props.translucent\">\n <val-toolbar [props]=\"props.toolbar\" (onClick)=\"clickHandler($event)\"></val-toolbar>\n </ion-header>\n `,\n styleUrls: ['./header.component.scss'],\n})\n/**\n * HeaderComponent\n *\n * Componente de encabezado reutilizable para aplicaciones Ionic/Angular.\n * Permite mostrar una barra de herramientas (toolbar) configurable.\n *\n * @example\n * <val-header [props]=\"headerProps\" (onClick)=\"handleHeaderAction($event)\"></val-header>\n *\n * @input props {HeaderMetadata} - Metadatos del encabezado y su toolbar.\n * @output onClick - Emite el token de la acción clicada en la toolbar.\n */\nexport class HeaderComponent implements OnInit {\n /**\n * Metadatos del encabezado y su toolbar.\n */\n @Input()\n props: HeaderMetadata;\n\n /**\n * Evento emitido al hacer click en una acción de la toolbar.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor() {}\n\n ngOnInit() {}\n\n /**\n * Emite el token de la acción clicada en la toolbar.\n * @param token Token de la acción\n */\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n}\n","import { NgClass, NgStyle } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport {\n IonAvatar,\n IonButton,\n IonIcon,\n IonItem,\n IonLabel,\n IonList,\n IonListHeader,\n IonNote,\n IonSpinner,\n} from '@ionic/angular/standalone';\nimport { IconService } from '../../../services/icons.service';\nimport { resolveColor } from '../../../shared/utils/styles';\nimport { ComponentStates } from '../../types';\nimport { ListMetadata } from './types';\n\n@Component({\n selector: 'val-item-list',\n standalone: true,\n imports: [\n RouterLink,\n NgStyle,\n NgClass,\n IonList,\n IonListHeader,\n IonLabel,\n IonNote,\n IonItem,\n IonAvatar,\n IonIcon,\n IonButton,\n IonSpinner,\n ],\n template: `\n <ion-list\n [inset]=\"props.rounded\"\n [class.shadowed]=\"props.shadowed\"\n [class.bordered]=\"props.bordered\"\n [style.borderColor]=\"this.color()\"\n >\n @if (props.title) {\n <ion-list-header>\n <ion-label>{{ props.title }}</ion-label>\n </ion-list-header>\n }\n @for (item of props.items; track item.token) {\n @if (item.mode == 'justext') {\n <ion-item\n [lines]=\"item.lines\"\n [button]=\"item.clickable\"\n [disabled]=\"item.disabled\"\n (click)=\"clickHandler(item.token)\"\n >\n @if (item.unreadIndicator) {\n <div class=\"unread-indicator-wrapper\" slot=\"start\">\n <div class=\"unread-indicator\"></div>\n </div>\n }\n\n <ion-label [ngClass]=\"{ 'ion-text-nowrap': item.ellipsis }\">\n <h2>{{ item.text }}</h2>\n\n @if (item.comments) {\n <ion-note color=\"medium\"> {{ item.comments }} </ion-note>\n }\n\n @if (item.subtitle) {\n <p>{{ item.subtitle }}</p>\n }\n </ion-label>\n\n @if (item.endNote) {\n <ion-note slot=\"end\">{{ item.endNote }}</ion-note>\n }\n </ion-item>\n }\n\n @if (item.mode == 'actionable') {\n <ion-item [lines]=\"item.lines\" [button]=\"item.clickable\" [disabled]=\"item.disabled\">\n @if (item.unreadIndicator) {\n <div class=\"unread-indicator-wrapper\" slot=\"start\">\n <div class=\"unread-indicator\"></div>\n </div>\n }\n\n <ion-label [ngClass]=\"{ 'ion-text-nowrap': item.ellipsis }\">\n <h2>{{ item.text }}</h2>\n\n @if (item.endNote) {\n <h3>{{ item.endNote }}</h3>\n }\n\n @if (item.subtitle) {\n <ion-note color=\"medium\"> {{ item.subtitle }} </ion-note>\n }\n\n @if (item.comments) {\n <ion-note color=\"medium\"> {{ item.comments }} </ion-note>\n }\n </ion-label>\n\n @if (item.actions) {\n @for (action of item.actions; track action.token) {\n <ion-button\n fill=\"outline\"\n color=\"dark\"\n slot=\"end\"\n [disabled]=\"action.state === states.WORKING\"\n (click)=\"onActionClickHandler(action.token)\"\n >\n @if (action.state !== states.WORKING) {\n @if (action.icon) {\n <ion-icon aria-hidden=\"true\" [name]=\"action.icon\" size=\"medium\" slot=\"start\"></ion-icon>\n }\n\n {{ action.description }}\n }\n\n @if (action.state === states.WORKING) {\n <ion-spinner class=\"action-spinner\" name=\"circular\"></ion-spinner>\n }\n </ion-button>\n }\n }\n </ion-item>\n }\n\n @if (item.mode == 'route') {\n <ion-item\n [lines]=\"item.lines\"\n [button]=\"item.clickable\"\n [disabled]=\"item.disabled\"\n (click)=\"clickHandler(item.token)\"\n [routerLink]=\"item.routerLink\"\n >\n @if (item.unreadIndicator) {\n <div class=\"unread-indicator-wrapper\" slot=\"start\">\n <div class=\"unread-indicator\"></div>\n </div>\n }\n @if (item.icon) {\n <ion-icon aria-hidden=\"true\" [name]=\"item.icon\" size=\"medium\" slot=\"start\"></ion-icon>\n }\n\n <ion-label [ngClass]=\"{ 'ion-text-nowrap': item.ellipsis }\">\n <h2>{{ item.text }}</h2>\n\n @if (item.comments) {\n <ion-note color=\"medium\"> {{ item.comments }} </ion-note>\n }\n </ion-label>\n </ion-item>\n }\n\n @if (item.mode == 'subtitule') {\n <ion-item\n [lines]=\"item.lines\"\n [button]=\"item.clickable\"\n [disabled]=\"item.disabled\"\n (click)=\"clickHandler(item.token)\"\n >\n @if (item.unreadIndicator) {\n <div class=\"unread-indicator-wrapper\" slot=\"start\">\n <div class=\"unread-indicator\"></div>\n </div>\n }\n\n <ion-label [ngClass]=\"{ 'ion-text-nowrap': item.ellipsis }\">\n <h1>{{ item.text }}</h1>\n <p>{{ item.subtitle }}</p>\n </ion-label>\n </ion-item>\n }\n\n @if (item.mode == 'avatar') {\n <ion-item\n [lines]=\"item.lines\"\n [button]=\"item.clickable\"\n [disabled]=\"item.disabled\"\n (click)=\"clickHandler(item.token)\"\n >\n <ion-avatar aria-hidden=\"true\" slot=\"start\">\n <img alt=\"\" [src]=\"item.image\" />\n </ion-avatar>\n <ion-label>{{ item.text }}</ion-label>\n </ion-item>\n }\n\n @if (item.mode == 'icon') {\n <ion-item\n [lines]=\"item.lines\"\n [button]=\"item.clickable\"\n [disabled]=\"item.disabled\"\n (click)=\"clickHandler(item.token)\"\n >\n <ion-icon aria-hidden=\"true\" [name]=\"item.icon\" size=\"medium\" slot=\"start\"></ion-icon>\n <ion-label>{{ item.text }}</ion-label>\n </ion-item>\n }\n }\n </ion-list>\n `,\n styleUrls: ['./item-list.component.scss'],\n})\n/**\n * ItemListComponent\n *\n * Componente de lista reutilizable para mostrar una colección de elementos con diferentes modos de visualización (texto, subtítulo, avatar, icono, ruta, acciones).\n * Permite acciones por elemento, indicadores de no leído, y personalización de estilos.\n *\n * @example\n * <val-item-list [props]=\"{ title: 'Usuarios', items: [{ text: 'Juan', mode: 'avatar', image: 'avatar.jpg' }] }\" (onClick)=\"handleClick($event)\"></val-item-list>\n *\n * @input props {ListMetadata} - Metadatos de la lista y sus elementos.\n * @output onClick - Emite el token del elemento clicado.\n * @output onActionClick - Emite el token de la acción clicada en un elemento.\n */\nexport class ItemListComponent implements OnInit {\n states = ComponentStates;\n defaultColor = 'primary';\n\n /**\n * Metadatos de la lista y sus elementos.\n */\n @Input()\n props: ListMetadata;\n\n /**\n * Evento emitido al hacer click en un elemento de la lista.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n /**\n * Evento emitido al hacer click en una acción de un elemento.\n */\n @Output()\n onActionClick = new EventEmitter<string>();\n\n constructor(icon: IconService) {}\n\n ngOnInit() {}\n\n /**\n * Emite el token del elemento clicado.\n * @param token Token del elemento\n */\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n\n /**\n * Emite el token de la acción clicada.\n * @param token Token de la acción\n */\n onActionClickHandler(token?: string) {\n this.onActionClick.emit(token);\n }\n\n /**\n * Devuelve el color de borde de la lista.\n */\n color() {\n return resolveColor(this.props.color || this.defaultColor);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { ImageComponent } from '../../atoms/image/image.component';\nimport { BannerComponent } from '../banner/banner.component';\nimport { NoContentMetadata } from './types';\n\n@Component({\n selector: 'val-no-content',\n standalone: true,\n imports: [ImageComponent, BannerComponent],\n template: `\n @if (props.topContent) {\n <div>\n <val-banner [props]=\"props.topContent\" (onClick)=\"onClickHandler($event)\"></val-banner>\n </div>\n }\n <val-image class=\"image-container\" [props]=\"props.image\"></val-image>\n <div>\n <val-banner [props]=\"props.bottomContent\" (onClick)=\"onClickHandler($event)\"></val-banner>\n </div>\n `,\n styleUrls: ['./no-content.component.scss'],\n})\n/**\n * NoContentComponent\n *\n * Componente para mostrar una pantalla de \"sin contenido\" con imagen y banners opcionales arriba y abajo.\n * Útil para estados vacíos, errores o mensajes informativos.\n *\n * @example\n * <val-no-content [props]=\"{ image: { src: 'empty.svg' }, bottomContent: { ... } }\"></val-no-content>\n *\n * @input props {NoContentMetadata} - Metadatos de la imagen y banners a mostrar.\n * @output onClick - Emite el token de acción de los banners si corresponde.\n */\nexport class NoContentComponent implements OnInit, OnChanges {\n @Input()\n props: NoContentMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n // Forzar detección de cambios múltiple para asegurar actualización\n this.cdr.detectChanges();\n setTimeout(() => {\n this.cdr.detectChanges();\n }, 0);\n }\n }\n\n onClickHandler(token: string) {\n this.onClick.emit(token);\n }\n}\n","/**\n * Tipos y metadatos para el componente WizardComponent.\n * Permiten definir los pasos, botones, estado y navegación del wizard.\n */\nimport { ButtonMetadata, ComponentState } from '../../types';\nimport { NoContentMetadata } from '../no-content/types';\n\n/**\n * Metadatos del wizard.\n * @property state Estado global del wizard.\n * @property current Paso actual.\n * @property steps Colección de pasos.\n * @property error Paso de error.\n */\nexport type WizardMetadata = {\n state: ComponentState;\n current: number;\n steps: Steps;\n error: Step;\n};\n\n/**\n * Representa un paso del wizard.\n * @property titles Metadatos de \"no contenido\" para el paso.\n * @property buttons Botones disponibles en el paso.\n */\nexport type Step = {\n titles: NoContentMetadata;\n buttons: ButtonMetadata[];\n};\n\n/**\n * Colección de pasos del wizard, indexados por número de paso.\n */\nexport type Steps = {\n [step: number]: Step;\n};\n\n/**\n * Enumera los posibles movimientos de navegación en el wizard.\n */\nexport enum MOTION {\n BACKWARD,\n FORWARD,\n RETRY,\n}\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { ProgressBarComponent } from '../../../atoms/progress-bar/progress-bar.component';\nimport { ButtonGroupComponent } from '../../../molecules/button-group/button-group.component';\nimport { ButtonMetadata, ComponentStates } from '../../../types';\nimport { FooterComponent } from '../../footer/footer.component';\nimport { MOTION, Step, WizardMetadata } from '../types';\n\n@Component({\n selector: 'val-wizard-footer',\n standalone: true,\n imports: [FooterComponent, ProgressBarComponent, ButtonGroupComponent],\n template: `\n <val-footer\n [props]=\"{\n bordered: false,\n translucent: false,\n toolbar: {\n title: '',\n actions: [],\n color: '',\n withBack: false,\n withActions: false,\n },\n }\"\n >\n <val-progress-bar\n extra\n [props]=\"{ progress: Progress, color: '', type: 'determinate', buffer: 1, size: 'small', rounded: false }\"\n ></val-progress-bar>\n <val-button-group\n extra\n [props]=\"{ buttons: actions, position: 'spaced', columned: false }\"\n (onClick)=\"clickHandler($event)\"\n ></val-button-group>\n </val-footer>\n `,\n styleUrls: ['./wizard-footer.component.scss'],\n})\nexport class WizardFooterComponent implements OnInit, OnChanges {\n @Input()\n props: WizardMetadata;\n\n @Output()\n onClick = new EventEmitter<{ current: number; motion: MOTION }>();\n\n wrapperId = 'wizard-wrapper';\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n this.cdr.detectChanges();\n }\n }\n\n clickHandler(token?: string) {\n if (!token) {\n return;\n }\n if (token.includes('right')) {\n this.tryToStep(MOTION.FORWARD);\n }\n if (token.includes('left')) {\n this.tryToStep(MOTION.BACKWARD);\n }\n }\n\n get Current(): Step {\n return this.props.steps[this.props.current];\n }\n\n get Progress(): number {\n if (this.props.steps && this.props.current) {\n return this.props.current / Object.keys(this.props.steps).length;\n }\n return 0;\n }\n\n get actions(): ButtonMetadata[] {\n if (this.props.state === ComponentStates.ERROR && this.Current.buttons.length > 1) {\n this.Current.buttons[1].state = ComponentStates.DISABLED;\n }\n\n if (this.props.current === 1 && this.Current.buttons.length > 1) {\n return [this.Current.buttons[1]];\n }\n return this.Current.buttons;\n }\n\n tryToStep(motion: MOTION): void {\n this.onClick.emit({ current: this.props.current, motion });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { goToTop } from '../../../shared/utils/dom';\nimport { ContentLoaderComponent } from '../../molecules/content-loader/content-loader.component';\nimport { ComponentStates } from '../../types';\nimport { NoContentComponent } from '../no-content/no-content.component';\nimport { MOTION, Step, WizardMetadata } from './types';\n\n@Component({\n selector: 'val-wizard',\n standalone: true,\n imports: [CommonModule, NoContentComponent, ContentLoaderComponent],\n template: `\n <div [id]=\"wrapperId\" class=\"wrapper\">\n <ng-container *ngIf=\"props.state !== 'ERROR'\">\n <val-no-content [props]=\"currentStepTitles\" [attr.data-step]=\"props.current\"></val-no-content>\n <div class=\"step\">\n <div *ngIf=\"props.state === 'WORKING'\">\n <val-content-loader\n [props]=\"{\n name: 'circular',\n color: 'primary',\n size: 'large',\n text: loadingText,\n }\"\n />\n </div>\n <ng-content select=\"[step]\"></ng-content>\n </div>\n </ng-container>\n <ng-container *ngIf=\"props.state === 'ERROR'\">\n <val-no-content [props]=\"props.error.titles\" (onClick)=\"clickHandler($event)\"></val-no-content>\n </ng-container>\n </div>\n `,\n styleUrls: ['./wizard.component.scss'],\n})\nexport class WizardComponent implements OnInit, OnChanges {\n @Input()\n props: WizardMetadata;\n\n @Output()\n onClick = new EventEmitter<{ current: number; motion: MOTION }>();\n\n wrapperId = 'wizard-wrapper';\n currentStep: Step | null = null;\n currentStepTitles: any = null;\n loadingText: string;\n\n private cdr = inject(ChangeDetectorRef);\n private langService = inject(LangService);\n\n constructor() {\n this.loadingText = this.langService.getText('_global', 'pleaseWait', 'Por favor espere...');\n }\n\n ngOnInit() {\n this.updateCurrentStep();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n this.updateCurrentStep();\n this.cdr.detectChanges();\n }\n }\n\n private updateCurrentStep(): void {\n if (this.props?.steps && this.props?.current) {\n this.currentStep = this.props.steps[this.props.current];\n // Forzar nueva referencia de objeto para asegurar detección de cambios\n // Agregar timestamp para garantizar que es un objeto completamente nuevo\n this.currentStepTitles = this.currentStep?.titles\n ? {\n ...JSON.parse(JSON.stringify(this.currentStep.titles)),\n _timestamp: Date.now(), // Forzar nueva referencia\n _step: this.props.current, // Agregar identificador del paso\n }\n : null;\n\n // Forzar detección de cambios inmediatamente\n this.cdr.detectChanges();\n }\n }\n\n working() {\n this.props.state = ComponentStates.WORKING;\n if (this.Current?.buttons) {\n this.Current.buttons.forEach(button => {\n button.state = ComponentStates.DISABLED;\n });\n }\n this.cdr.markForCheck();\n }\n\n done() {\n if (this.props.state === ComponentStates.ENABLED) {\n return;\n }\n\n this.props.state = ComponentStates.ENABLED;\n if (this.Current?.buttons) {\n this.Current.buttons.forEach(button => {\n button.state = ComponentStates.ENABLED;\n });\n }\n this.cdr.markForCheck();\n }\n\n get Current(): Step {\n if (this.props?.steps && this.props?.current) {\n return this.props.steps[this.props.current];\n }\n return this.currentStep || { titles: null, buttons: [] };\n }\n\n setCurrent(newStep: number) {\n if (newStep === this.props.current) {\n return;\n }\n\n this.props.current = newStep;\n this.updateCurrentStep();\n\n // Forzar múltiples ciclos de detección de cambios\n this.cdr.detectChanges();\n setTimeout(() => {\n this.cdr.detectChanges();\n }, 0);\n\n goToTop(this.wrapperId);\n }\n\n setError(error: string) {\n if (this.props.state === ComponentStates.ERROR) {\n return;\n }\n\n this.props.error.titles.bottomContent.content.bellowTitle.content = error;\n this.props.state = ComponentStates.ERROR;\n this.cdr.markForCheck();\n goToTop(this.wrapperId);\n }\n\n reset() {\n this.props.error.titles.bottomContent.content.bellowTitle.content = '';\n this.done();\n }\n\n clickHandler(token?: string) {\n if (!token) {\n return;\n }\n if (token.includes('retry')) {\n this.reset();\n }\n\n this.onClick.emit({ current: this.props.current, motion: MOTION.RETRY });\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'val-layout',\n standalone: true,\n imports: [],\n template: `\n <div class=\"layout-container\">\n <ng-content></ng-content>\n </div>\n `,\n styleUrl: './layout.component.scss',\n})\nexport class LayoutComponent {}\n","import { NgStyle } from '@angular/common';\nimport { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { IonContent, IonHeader, IonTitle, IonToolbar } from '@ionic/angular/standalone';\nimport { ThemeService } from '../../../services/theme.service';\nimport { DividerComponent } from '../../atoms/divider/divider.component';\nimport { ExpandableTextComponent } from '../../molecules/expandable-text/expandable-text.component';\nimport { LinkComponent } from '../../molecules/link/link.component';\nimport { HeaderComponent } from '../../organisms/header/header.component';\nimport { LayoutComponent } from '../layout/layout.component';\nimport { SimpleMetadata } from './types';\n\n@Component({\n selector: 'val-simple',\n standalone: true,\n imports: [\n NgStyle,\n IonHeader,\n IonToolbar,\n IonTitle,\n IonContent,\n HeaderComponent,\n LayoutComponent,\n DividerComponent,\n LinkComponent,\n ExpandableTextComponent,\n ],\n template: `\n <val-header [props]=\"props.header\" />\n\n <ion-content\n [fullscreen]=\"true\"\n [ngStyle]=\"{\n '--background': theme.IsDark ? 'var(--ion-background-color)' : props.background,\n }\"\n [scrollEvents]=\"true\"\n (ionScroll)=\"onScrollHandler($event)\"\n >\n <ion-header collapse=\"condense\">\n <ion-toolbar style=\"--background: transparent;\">\n <ion-title style=\"padding: 0;\" size=\"large\">{{ props.pageTitle }}</ion-title>\n </ion-toolbar>\n </ion-header>\n @if (props.pageDescription) {\n <div class=\"description-container\">\n <val-expandable-text\n [props]=\"{\n limit: 180,\n content: props.pageDescription,\n color: 'primary',\n expandText: 'más',\n }\"\n />\n </div>\n }\n @if (props.link) {\n <val-link [props]=\"props.link\" (onClick)=\"onClickHandler($event)\"></val-link>\n }\n @if (props.withDivider) {\n <val-divider [props]=\"{ fill: 'solid', size: 'medium', color: 'dark' }\" />\n }\n <val-layout>\n <ng-content select=\"[inner-container]\"></ng-content>\n </val-layout>\n </ion-content>\n <ng-content select=\"[outter-container]\"></ng-content>\n `,\n styles: `\n .description-container {\n padding: 0px 16px;\n }\n `,\n})\nexport class SimpleComponent {\n @Input()\n props: SimpleMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n @Output()\n onScrollEvent = new EventEmitter<boolean>();\n\n theme = inject(ThemeService);\n\n onClickHandler(token?: string) {\n this.onClick.emit(token);\n }\n\n onScrollHandler($event: Event) {\n this.onScrollEvent.emit(true);\n }\n}\n","import { LanguagesContent, TextContent } from '../types';\n\nconst text: LanguagesContent = {\n es: {\n spanish: 'Español',\n english: 'Inglés',\n },\n en: {\n spanish: 'Spanish',\n english: 'English',\n },\n};\n\nexport default new TextContent(text);\n","import LangSettings from './components/lang-settings';\nimport { LanguagesContent, TextContent } from './types';\n\nexport interface Provider {\n [x: string]: TextContent;\n}\n\n/**\n * Global content that can be used across all components.\n * These are common texts like buttons, actions, states, etc.\n * Structure: {es: {key1: 'value1', key2: 'value2'}, en: {key1: 'value1', key2: 'value2'}, fr: {...}}\n *\n * Note: You can add any language code. The system will automatically detect available languages\n * and provide intelligent fallbacks with warnings for missing translations.\n */\nconst globalContentData: LanguagesContent = {\n es: {\n // Common buttons\n ok: 'Aceptar',\n cancel: 'Cancelar',\n save: 'Guardar',\n delete: 'Eliminar',\n edit: 'Editar',\n close: 'Cerrar',\n back: 'Volver',\n next: 'Siguiente',\n previous: 'Anterior',\n finish: 'Finalizar',\n continue: 'Continuar',\n\n // Common actions\n add: 'Agregar',\n remove: 'Quitar',\n search: 'Buscar',\n filter: 'Filtrar',\n sort: 'Ordenar',\n refresh: 'Actualizar',\n\n // Common states and messages\n loading: 'Cargando...',\n pleaseWait: 'Por favor espere...',\n noData: 'No hay datos disponibles',\n error: 'Error',\n success: 'Éxito',\n warning: 'Advertencia',\n info: 'Información',\n language: 'Idioma',\n\n // Common confirmations\n areYouSure: '¿Estás seguro?',\n\n // Language names (translated) - flat keys for type compatibility\n languageName_es: 'Español',\n languageName_en: 'Inglés',\n languageName_fr: 'Francés',\n languageName_de: 'Alemán',\n languageName_pt: 'Portugués',\n languageName_it: 'Italiano',\n languageName_zh: 'Chino',\n languageName_ja: 'Japonés',\n languageName_ko: 'Coreano',\n languageName_ru: 'Ruso',\n languageName_ar: 'Árabe',\n deleteConfirmation: '¿Estás seguro de que deseas eliminar {itemName}?',\n unsavedChanges: 'Tienes cambios sin guardar. ¿Deseas continuar?',\n\n // Common placeholders\n searchPlaceholder: 'Buscar...',\n select: 'Seleccionar...',\n selectOption: 'Seleccione una opción',\n selectLanguage: 'Seleccionar idioma...',\n\n // Status messages\n copied: '¡Copiado al portapapeles!',\n seeMore: 'ver más',\n selected: 'seleccionados',\n\n // Image preview\n zoomIn: 'Acercar',\n zoomOut: 'Alejar',\n resetZoom: 'Restablecer zoom',\n },\n en: {\n // Common buttons\n ok: 'OK',\n cancel: 'Cancel',\n save: 'Save',\n delete: 'Delete',\n edit: 'Edit',\n close: 'Close',\n back: 'Back',\n next: 'Next',\n previous: 'Previous',\n finish: 'Finish',\n continue: 'Continue',\n\n // Common actions\n add: 'Add',\n remove: 'Remove',\n search: 'Search',\n filter: 'Filter',\n sort: 'Sort',\n refresh: 'Refresh',\n\n // Common states and messages\n loading: 'Loading...',\n pleaseWait: 'Please wait...',\n noData: 'No data available',\n error: 'Error',\n success: 'Success',\n warning: 'Warning',\n info: 'Information',\n language: 'Language',\n\n // Common confirmations\n areYouSure: 'Are you sure?',\n\n // Language names (translated) - flat keys for type compatibility\n languageName_es: 'Spanish',\n languageName_en: 'English',\n languageName_fr: 'French',\n languageName_de: 'German',\n languageName_pt: 'Portuguese',\n languageName_it: 'Italian',\n languageName_zh: 'Chinese',\n languageName_ja: 'Japanese',\n languageName_ko: 'Korean',\n languageName_ru: 'Russian',\n languageName_ar: 'Arabic',\n deleteConfirmation: 'Are you sure you want to delete {itemName}?',\n unsavedChanges: 'You have unsaved changes. Do you want to continue?',\n\n // Common placeholders\n searchPlaceholder: 'Search...',\n select: 'Select...',\n selectOption: 'Select an option',\n selectLanguage: 'Select language...',\n\n // Status messages\n copied: 'Copied to clipboard!',\n seeMore: 'see more',\n selected: 'selected',\n\n // Image preview\n zoomIn: 'Zoom in',\n zoomOut: 'Zoom out',\n resetZoom: 'Reset zoom',\n },\n};\n\nconst GlobalContent = new TextContent(globalContentData);\n\n// ImageComponent specific content\nconst imageComponentData: LanguagesContent = {\n es: {\n close: 'Cerrar',\n zoomIn: 'Acercar',\n zoomOut: 'Alejar',\n resetZoom: 'Restablecer zoom',\n },\n en: {\n close: 'Close',\n zoomIn: 'Zoom in',\n zoomOut: 'Zoom out',\n resetZoom: 'Reset zoom',\n },\n};\n\nconst ImageComponentContent = new TextContent(imageComponentData);\n\nconst content: Provider = {\n _global: GlobalContent,\n LangSettings,\n ImageComponent: ImageComponentContent,\n};\n\nexport default content;\n\n// Export named exports for user convenience\nexport { content, GlobalContent, globalContentData };\n","import { Injectable } from '@angular/core';\nimport { ToastController, ToastOptions } from '@ionic/angular';\n\n/**\n * Service for displaying toast notifications using Ionic's ToastController.\n * Provides methods to show and present toasts with custom options.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ToastService {\n constructor(private toastController: ToastController) {}\n\n /**\n * Presents a toast notification with the given options.\n * @param request Toast options (message, duration, position, color, etc.)\n */\n async presentToast(request: ToastOptions) {\n const toast = await this.toastController.create({\n message: request.message,\n duration: request.duration,\n position: request.position,\n color: request.color,\n });\n\n await toast.present();\n }\n\n /**\n * Shows a toast notification and logs the result.\n * @param request Toast options (message, duration, position, color, etc.)\n */\n show(request: ToastOptions) {\n this.presentToast(request)\n .then(() => {\n console.info('Toast created');\n })\n .catch(error => {\n console.error(JSON.stringify(error));\n });\n }\n}\n","import { Observable, map } from 'rxjs';\nimport { LangService } from '../../services/lang-provider/lang-provider.service';\n\n/**\n * Content utilities for reactive text binding in components.\n *\n * These utilities provide a convenient way to bind component properties\n * to language content that automatically updates when the language changes.\n */\n\n/**\n * Unified configuration for content binding with optional interpolation.\n * Supports both simple content retrieval and content with dynamic values.\n */\nexport interface ContentConfig {\n /**\n * The component class name (used for content lookup).\n * If omitted, searches in global content (_global namespace).\n */\n className?: string;\n /** The content key to retrieve */\n key: string;\n /** Optional fallback text if content is not found */\n fallback?: string;\n /** Optional object with values to interpolate into the content string */\n interpolation?: Record<string, string | number>;\n}\n\n/**\n * @deprecated Use ContentConfig with interpolation property instead.\n * This interface is kept for backward compatibility.\n */\nexport interface InterpolatedContentConfig extends ContentConfig {\n /** Object with values to interpolate into the content string */\n interpolation?: Record<string, string | number>;\n}\n\n/**\n * Create a reactive content observable from a content key.\n * This is the primary utility for the `fromContent` pattern with unified support\n * for both simple content and content with interpolation.\n *\n * @param langService - The language service instance\n * @param config - Content configuration with optional interpolation\n * @returns Observable that emits the content string and updates on language change\n *\n * @example Simple content:\n * ```typescript\n * // Component-specific content\n * this.title$ = fromContent(this.langService, {\n * className: 'HeaderComponent',\n * key: 'title',\n * fallback: 'Default Title'\n * });\n *\n * // Global content (no className needed)\n * this.saveButton$ = fromContent(this.langService, {\n * key: 'save'\n * });\n * ```\n *\n * @example Content with interpolation:\n * ```typescript\n * // Content: \"Hello {name}, you have {count} messages\"\n * this.greeting$ = fromContent(this.langService, {\n * className: 'WelcomeComponent',\n * key: 'greeting',\n * interpolation: { name: 'John', count: 5 }\n * });\n * // Results in: \"Hello John, you have 5 messages\"\n * ```\n */\nexport function fromContent(langService: LangService, config: ContentConfig): Observable<string> {\n // Use _global as default className if not provided\n const finalClassName = config.className || '_global';\n\n const contentObservable = langService.getContent(finalClassName, config.key, config.fallback);\n\n // If interpolation is provided, apply it\n if (config.interpolation) {\n return contentObservable.pipe(\n map(content => interpolateContent(content, config.interpolation))\n );\n }\n\n return contentObservable;\n}\n\n/**\n * Create a reactive content observable with interpolation support.\n *\n * @deprecated Use fromContent() with interpolation property instead.\n * This method is kept for backward compatibility.\n *\n * @param langService - The language service instance\n * @param config - Interpolated content configuration\n * @returns Observable that emits the interpolated content string\n *\n * @example Migration:\n * ```typescript\n * // OLD (deprecated):\n * this.greeting$ = fromContentWithInterpolation(this.langService, {\n * className: 'WelcomeComponent',\n * key: 'greeting',\n * interpolation: { name: 'John', count: 5 }\n * });\n *\n * // NEW (recommended):\n * this.greeting$ = fromContent(this.langService, {\n * className: 'WelcomeComponent',\n * key: 'greeting',\n * interpolation: { name: 'John', count: 5 }\n * });\n * ```\n */\nexport function fromContentWithInterpolation(\n langService: LangService,\n config: InterpolatedContentConfig\n): Observable<string> {\n // Delegate to the unified fromContent method\n return fromContent(langService, config);\n}\n\n/**\n * Create multiple reactive content observables at once.\n * Useful when a component needs several content strings.\n *\n * @param langService - The language service instance\n * @param className - The component class name\n * @param keys - Array of content keys to retrieve\n * @returns Observable that emits an object with all requested content\n *\n * @example\n * ```typescript\n * this.content$ = fromMultipleContent(this.langService, 'FormComponent', [\n * 'title', 'submitButton', 'cancelButton'\n * ]);\n *\n * // In template\n * <ng-container *ngIf=\"content$ | async as content\">\n * <h2>{{ content.title }}</h2>\n * <button>{{ content.submitButton }}</button>\n * <button>{{ content.cancelButton }}</button>\n * </ng-container>\n * ```\n */\nexport function fromMultipleContent(\n langService: LangService,\n className: string,\n keys: string[]\n): Observable<Record<string, string>> {\n return langService.getMultipleContent(className, keys);\n}\n\n/**\n * Helper function to interpolate values into a content string.\n * Replaces placeholders in the format {key} with corresponding values.\n *\n * @param content - The content string with placeholders\n * @param values - Object with values to interpolate\n * @returns The interpolated string\n *\n * @example\n * ```typescript\n * const result = interpolateContent(\"Hello {name}!\", { name: \"World\" });\n * // Returns: \"Hello World!\"\n * ```\n */\nexport function interpolateContent(\n content: string,\n values?: Record<string, string | number>\n): string {\n if (!values) return content;\n\n return Object.entries(values).reduce((result, [key, value]) => {\n return result.replace(new RegExp(`\\\\{${key}\\\\}`, 'g'), String(value));\n }, content);\n}\n\n/**\n * Type-safe content key builder for better IDE support.\n * This is a utility type that can be used to ensure content keys exist.\n *\n * @example\n * ```typescript\n * // Define your component's content keys\n * interface MyComponentContent {\n * title: string;\n * description: string;\n * submitButton: string;\n * }\n *\n * // Use with type safety\n * const titleKey: ContentKey<MyComponentContent> = 'title'; // ✓ Valid\n * const invalidKey: ContentKey<MyComponentContent> = 'invalid'; // ✗ Type error\n * ```\n */\nexport type ContentKey<T> = keyof T & string;\n\n/**\n * Factory function to create a content helper bound to a specific component class.\n * This creates a more convenient API for components that need multiple content strings.\n *\n * @param langService - The language service instance\n * @param className - The component class name\n * @returns Object with convenient methods for content retrieval\n *\n * @example\n * ```typescript\n * export class MyComponent {\n * private content = createContentHelper(this.langService, 'MyComponent');\n *\n * constructor(private langService: LangService) {}\n *\n * ngOnInit() {\n * this.title$ = this.content.get('title');\n * this.allContent$ = this.content.getMultiple(['title', 'description']);\n * }\n * }\n * ```\n */\nexport function createContentHelper(langService: LangService, className: string) {\n return {\n /**\n * Get a single content string reactively.\n */\n get(key: string, fallback?: string): Observable<string> {\n return fromContent(langService, { className, key, fallback });\n },\n\n /**\n * Get multiple content strings reactively.\n */\n getMultiple(keys: string[]): Observable<Record<string, string>> {\n return fromMultipleContent(langService, className, keys);\n },\n\n /**\n * Get content with interpolation.\n */\n getWithInterpolation(\n key: string,\n interpolation: Record<string, string | number>,\n fallback?: string\n ): Observable<string> {\n return fromContentWithInterpolation(langService, {\n className,\n key,\n interpolation,\n fallback,\n });\n },\n\n /**\n * Get a single content string synchronously (current language only).\n */\n getText(key: string, fallback?: string): string {\n return langService.getText(className, key, fallback);\n },\n\n /**\n * Check if a content key exists.\n */\n hasContent(key: string): boolean {\n return langService.hasContent(className, key);\n },\n };\n}\n","/*\n * Public API Surface of valtech-components\n */\n\nexport * from './lib/components/atoms/avatar/avatar.component';\nexport * from './lib/components/atoms/avatar/types';\nexport * from './lib/components/atoms/box/box.component';\nexport * from './lib/components/atoms/box/types';\nexport * from './lib/components/atoms/button/button.component';\nexport * from './lib/components/atoms/button/factory';\nexport * from './lib/components/atoms/display/display.component';\nexport * from './lib/components/atoms/display/types';\nexport * from './lib/components/atoms/divider/divider.component';\nexport * from './lib/components/atoms/divider/types';\nexport * from './lib/components/atoms/href/href.component';\nexport * from './lib/components/atoms/href/types';\nexport * from './lib/components/atoms/icon/icon.component';\nexport * from './lib/components/atoms/icon/types';\nexport * from './lib/components/atoms/image/image.component';\nexport * from './lib/components/atoms/image/types';\nexport * from './lib/components/atoms/progress-bar/progress-bar.component';\nexport * from './lib/components/atoms/progress-bar/types';\nexport * from './lib/components/atoms/text/text.component';\nexport * from './lib/components/atoms/text/types';\nexport * from './lib/components/atoms/title/title.component';\nexport * from './lib/components/atoms/title/types';\n\nexport * from './lib/components/molecules/alert-box/alert-box.component';\nexport * from './lib/components/molecules/alert-box/types';\nexport * from './lib/components/molecules/button-group/button-group.component';\nexport * from './lib/components/molecules/button-group/types';\nexport * from './lib/components/molecules/card/card.component';\nexport * from './lib/components/molecules/card/types';\nexport * from './lib/components/molecules/check-input/check-input.component';\nexport * from './lib/components/molecules/comment-input/comment-input.component';\nexport * from './lib/components/molecules/content-loader/content-loader.component';\nexport * from './lib/components/molecules/content-loader/types';\nexport * from './lib/components/molecules/date-input/date-input.component';\nexport * from './lib/components/molecules/email-input/email-input.component';\nexport * from './lib/components/molecules/expandable-text/expandable-text.component';\nexport * from './lib/components/molecules/expandable-text/types';\nexport * from './lib/components/molecules/file-input/file-input.component';\nexport * from './lib/components/molecules/hint/hint.component';\nexport * from './lib/components/molecules/hour-input/hour-input.component';\nexport * from './lib/components/molecules/language-selector/language-selector.component';\nexport * from './lib/components/molecules/language-selector/types';\nexport * from './lib/components/molecules/layered-card/layered-card.component';\nexport * from './lib/components/molecules/layered-card/types';\nexport * from './lib/components/molecules/link/link.component';\nexport * from './lib/components/molecules/link/types';\nexport * from './lib/components/molecules/links-cake/links-cake.component';\nexport * from './lib/components/molecules/links-cake/types';\nexport * from './lib/components/molecules/notes-box/notes-box.component';\nexport * from './lib/components/molecules/notes-box/types';\nexport * from './lib/components/molecules/number-input/number-input.component';\nexport * from './lib/components/molecules/number-from-to/number-from-to.component';\nexport * from './lib/components/molecules/password-input/password-input.component';\nexport * from './lib/components/molecules/pin-input/pin-input.component';\nexport * from './lib/components/molecules/popover-selector/popover-selector.component';\nexport * from './lib/components/molecules/popover-selector/types';\nexport * from './lib/components/molecules/progress-status/progress-status.component';\nexport * from './lib/components/molecules/progress-status/types';\nexport * from './lib/components/molecules/prompter/prompter.component';\nexport * from './lib/components/molecules/prompter/types';\nexport * from './lib/components/molecules/radio-input/radio-input.component';\nexport * from './lib/components/molecules/searchbar/searchbar.component';\nexport * from './lib/components/molecules/select-input/select-input.component';\nexport * from './lib/components/molecules/select-search/select-search.component';\nexport * from './lib/components/molecules/text-input/text-input.component';\nexport * from './lib/components/molecules/title-block/title-block.component';\nexport * from './lib/components/molecules/title-block/types';\nexport * from './lib/components/molecules/code-display/code-display.component';\nexport * from './lib/components/molecules/code-display/types';\nexport * from './lib/components/molecules/action-header/action-header.component';\nexport * from './lib/components/molecules/action-header/types';\nexport * from './lib/components/molecules/pill/pill.component';\nexport * from './lib/components/molecules/pill/types';\nexport * from './lib/components/molecules/command-display/command-display.component';\nexport * from './lib/components/molecules/command-display/types';\nexport * from './lib/components/molecules/info/info.component';\nexport * from './lib/components/molecules/info/types';\nexport * from './lib/components/molecules/plain-code-box/plain-code-box.component';\nexport * from './lib/components/molecules/plain-code-box/types';\n\nexport * from './lib/components/organisms/article/article.component';\nexport * from './lib/components/organisms/article/types';\nexport * from './lib/components/organisms/banner/banner.component';\nexport * from './lib/components/organisms/banner/types';\nexport * from './lib/components/organisms/footer/footer.component';\nexport * from './lib/components/organisms/form/factory';\nexport * from './lib/components/organisms/form/form-footer/form-footer.component';\nexport * from './lib/components/organisms/form/form.component';\nexport * from './lib/components/organisms/header/header.component';\nexport * from './lib/components/organisms/header/types';\nexport * from './lib/components/organisms/item-list/item-list.component';\nexport * from './lib/components/organisms/item-list/types';\nexport * from './lib/components/organisms/no-content/no-content.component';\nexport * from './lib/components/organisms/no-content/types';\nexport * from './lib/components/organisms/toolbar/toolbar.component';\nexport * from './lib/components/organisms/toolbar/types';\nexport * from './lib/components/organisms/wizard/types';\nexport * from './lib/components/organisms/wizard/wizard-footer/wizard-footer.component';\nexport * from './lib/components/organisms/wizard/wizard.component';\n\nexport * from './lib/components/organisms/article/article.component';\nexport * from './lib/components/organisms/article/types';\n\nexport * from './lib/components/templates/layout/layout.component';\nexport * from './lib/components/templates/simple/simple.component';\nexport * from './lib/components/templates/simple/types';\n\nexport * from './lib/services/download.service';\nexport * from './lib/services/icons.service';\nexport * from './lib/services/in-app-browser.service';\nexport * from './lib/services/lang-provider/content';\nexport * from './lib/services/lang-provider/lang-provider.service';\nexport * from './lib/services/lang-provider/types';\nexport * from './lib/services/link-processor.service';\nexport * from './lib/services/local-storage.service';\nexport * from './lib/services/navigation.service';\nexport * from './lib/services/theme.service';\nexport * from './lib/services/toast.service';\nexport * from './lib/services/types';\n\nexport * from './lib/components/types';\nexport * from './lib/shared/pipes/process-links.pipe';\nexport * from './lib/shared/utils/content';\nexport * from './lib/shared/utils/dom';\nexport * from './lib/shared/utils/form-defaults';\n// Export specific functions from simple-content to avoid conflicts\nexport {\n createReactiveContentMetadata,\n extractContentConfig,\n extractContentConfigWithInterpolation,\n interpolateStaticContent,\n ReactiveContentMetadata,\n ReactiveContentWithInterpolation,\n ReactiveTextMetadata,\n shouldUseReactiveContent,\n shouldUseReactiveContentWithInterpolation,\n} from './lib/shared/utils/simple-content';\nexport * from './lib/shared/utils/styles';\nexport * from './lib/shared/utils/text';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.IconService","i2","interpolateContent","fromContentWithInterpolation","i1.DownloadService","i2.IconService","i3.NavigationService","i4.LangService","i1","i1.LangService","i2.LinkProcessorService","map","i3"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"valtech-components.mjs","sources":["../../../src/lib/components/atoms/avatar/avatar.component.ts","../../../src/lib/services/icons.service.ts","../../../src/lib/components/atoms/box/box.component.ts","../../../src/lib/shared/utils/simple-content.ts","../../../src/lib/components/types.ts","../../../src/lib/services/download.service.ts","../../../src/lib/services/in-app-browser.service.ts","../../../src/lib/services/navigation.service.ts","../../../src/lib/shared/constants/storage.ts","../../../src/lib/services/local-storage.service.ts","../../../src/lib/services/types.ts","../../../src/lib/services/lang-provider/types.ts","../../../src/lib/services/lang-provider/lang-provider.service.ts","../../../src/lib/components/atoms/button/button.component.ts","../../../src/lib/components/atoms/button/factory.ts","../../../src/lib/components/atoms/display/display.component.ts","../../../src/lib/components/atoms/divider/divider.component.ts","../../../src/lib/components/atoms/href/href.component.ts","../../../src/lib/components/atoms/icon/icon.component.ts","../../../src/lib/components/atoms/image/image.component.ts","../../../src/lib/components/atoms/progress-bar/progress-bar.component.ts","../../../src/lib/services/link-processor.service.ts","../../../src/lib/shared/pipes/process-links.pipe.ts","../../../src/lib/components/atoms/text/text.component.ts","../../../src/lib/components/atoms/title/title.component.ts","../../../src/lib/components/atoms/title/types.ts","../../../src/lib/components/atoms/skeleton/types.ts","../../../src/lib/components/atoms/skeleton/skeleton.component.ts","../../../src/lib/components/atoms/progress-ring/progress-ring.component.ts","../../../src/lib/components/atoms/fab/fab.component.ts","../../../src/lib/services/qr-generator/types.ts","../../../src/lib/services/qr-generator/qr-generator.service.ts","../../../src/lib/components/atoms/qr-code/qr-code.component.ts","../../../src/lib/components/atoms/countdown/types.ts","../../../src/lib/components/atoms/countdown/countdown.component.ts","../../../src/lib/components/atoms/price-tag/types.ts","../../../src/lib/components/atoms/price-tag/price-tag.component.ts","../../../src/lib/components/molecules/alert-box/alert-box.component.ts","../../../src/lib/components/molecules/button-group/button-group.component.ts","../../../src/lib/components/molecules/card/types.ts","../../../src/lib/components/molecules/card/card.component.ts","../../../src/lib/components/molecules/check-input/check-input.component.ts","../../../src/lib/components/molecules/comment-input/comment-input.component.ts","../../../src/lib/components/molecules/content-loader/content-loader.component.ts","../../../src/lib/shared/utils/form-defaults.ts","../../../src/lib/components/molecules/date-input/date-input.component.ts","../../../src/lib/components/molecules/email-input/email-input.component.ts","../../../src/lib/shared/utils/styles.ts","../../../src/lib/components/molecules/expandable-text/expandable-text.component.ts","../../../src/lib/components/molecules/file-input/file-input.component.ts","../../../src/lib/components/molecules/hint/hint.component.ts","../../../src/lib/components/molecules/hour-input/hour-input.component.ts","../../../src/lib/components/molecules/popover-selector/popover-selector.component.ts","../../../src/lib/components/molecules/language-selector/language-selector.component.ts","../../../src/lib/services/theme.service.ts","../../../src/lib/components/molecules/title-block/title-block.component.ts","../../../src/lib/components/molecules/layered-card/layered-card.component.ts","../../../src/lib/components/molecules/link/link.component.ts","../../../src/lib/components/molecules/links-cake/links-cake.component.ts","../../../src/lib/components/molecules/notes-box/notes-box.component.ts","../../../src/lib/components/molecules/number-input/number-input.component.ts","../../../src/lib/components/molecules/number-from-to/number-from-to.component.ts","../../../src/lib/components/molecules/password-input/password-input.component.ts","../../../src/lib/components/molecules/pin-input/pin-input.component.ts","../../../src/lib/components/molecules/progress-status/progress-status.component.ts","../../../src/lib/components/molecules/prompter/prompter.component.ts","../../../src/lib/components/molecules/radio-input/radio-input.component.ts","../../../src/lib/components/molecules/range-input/range-input.component.ts","../../../src/lib/components/molecules/searchbar/searchbar.component.ts","../../../src/lib/components/molecules/select-input/select-input.component.ts","../../../src/lib/shared/utils/text.ts","../../../src/lib/components/molecules/select-search/select-search.component.ts","../../../src/lib/components/molecules/segment-control/segment-control.component.ts","../../../src/lib/components/molecules/text-input/text-input.component.ts","../../../src/lib/components/molecules/toggle-input/toggle-input.component.ts","../../../src/lib/components/molecules/code-display/code-display.component.ts","../../../src/lib/components/molecules/action-header/action-header.component.ts","../../../src/lib/components/molecules/pill/pill.component.ts","../../../src/lib/components/molecules/command-display/command-display.component.ts","../../../src/lib/components/molecules/info/info.component.ts","../../../src/lib/components/molecules/plain-code-box/plain-code-box.component.ts","../../../src/lib/components/molecules/accordion/accordion.component.ts","../../../src/lib/components/molecules/tabs/tabs.component.ts","../../../src/lib/components/molecules/breadcrumb/breadcrumb.component.ts","../../../src/lib/components/molecules/pagination/pagination.component.ts","../../../src/lib/components/molecules/stepper/stepper.component.ts","../../../src/lib/components/molecules/chip-group/chip-group.component.ts","../../../src/lib/components/molecules/rating/rating.component.ts","../../../src/lib/components/molecules/timeline/timeline.component.ts","../../../src/lib/components/molecules/stats-card/stats-card.component.ts","../../../src/lib/components/molecules/comment/comment.component.ts","../../../src/lib/components/molecules/multi-select-search/multi-select-search.component.ts","../../../src/lib/components/molecules/quote-box/quote-box.component.ts","../../../src/lib/components/molecules/textarea-input/textarea-input.component.ts","../../../src/lib/components/molecules/phone-input/types.ts","../../../src/lib/components/molecules/phone-input/phone-input.component.ts","../../../src/lib/components/molecules/currency-input/types.ts","../../../src/lib/components/molecules/currency-input/currency-input.component.ts","../../../src/lib/components/molecules/date-range-input/date-range-input.component.ts","../../../src/lib/components/molecules/number-stepper/number-stepper.component.ts","../../../src/lib/components/molecules/ticket-grid/types.ts","../../../src/lib/components/molecules/ticket-grid/ticket-grid.component.ts","../../../src/lib/components/molecules/share-buttons/types.ts","../../../src/lib/components/molecules/share-buttons/share-buttons.component.ts","../../../src/lib/components/molecules/winner-display/types.ts","../../../src/lib/components/molecules/winner-display/winner-display.component.ts","../../../src/lib/components/molecules/raffle-status-card/types.ts","../../../src/lib/components/molecules/raffle-status-card/raffle-status-card.component.ts","../../../src/lib/components/molecules/participant-card/types.ts","../../../src/lib/components/molecules/participant-card/participant-card.component.ts","../../../src/lib/components/molecules/glow-card/glow-card.component.ts","../../../src/lib/components/molecules/glow-card/types.ts","../../../src/lib/components/organisms/article/article.component.ts","../../../src/lib/components/organisms/article/types.ts","../../../src/lib/components/organisms/banner/banner.component.ts","../../../src/lib/components/organisms/toolbar/toolbar.component.ts","../../../src/lib/components/organisms/footer/footer.component.ts","../../../src/lib/components/organisms/form/factory.ts","../../../src/lib/components/organisms/form/form-footer/form-footer.component.ts","../../../src/lib/shared/utils/dom.ts","../../../src/lib/components/organisms/form/form.component.ts","../../../src/lib/components/organisms/header/header.component.ts","../../../src/lib/components/organisms/item-list/item-list.component.ts","../../../src/lib/components/organisms/no-content/no-content.component.ts","../../../src/lib/components/organisms/wizard/types.ts","../../../src/lib/components/organisms/wizard/wizard-footer/wizard-footer.component.ts","../../../src/lib/components/organisms/wizard/wizard.component.ts","../../../src/lib/components/organisms/comment-section/comment-section.component.ts","../../../src/lib/components/organisms/data-table/types.ts","../../../src/lib/components/organisms/data-table/data-table.component.ts","../../../src/lib/components/templates/layout/layout.component.ts","../../../src/lib/components/templates/simple/simple.component.ts","../../../src/lib/services/lang-provider/components/lang-settings.ts","../../../src/lib/services/lang-provider/content.ts","../../../src/lib/services/toast.service.ts","../../../src/lib/services/confirmation-dialog/types.ts","../../../src/lib/services/confirmation-dialog/confirmation-dialog.service.ts","../../../src/lib/services/modal/types.ts","../../../src/lib/services/modal/modal.service.ts","../../../src/lib/shared/utils/content.ts","../../../src/public-api.ts","../../../src/valtech-components.ts"],"sourcesContent":["import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IonAvatar } from '@ionic/angular/standalone';\nimport { AvatarMetadata } from './types';\n\n@Component({\n selector: 'val-avatar',\n standalone: true,\n imports: [IonAvatar],\n template: `\n <ion-avatar\n aria-hidden=\"true\"\n [class]=\"props.size\"\n [class.box]=\"props.box\"\n [class.grayscale]=\"props.grayscale\"\n (click)=\"onClickHandler()\"\n >\n <img alt=\"profile image\" [src]=\"props.image || props.default\" />\n </ion-avatar>\n `,\n styleUrls: ['./avatar.component.scss'],\n})\n/**\n * val-avatar\n *\n * Displays a user or profile image, optionally with a box style and different sizes.\n *\n * @example\n * <val-avatar [props]=\"{ image: 'url', size: 'medium', box: true }\" (onClick)=\"handler()\"></val-avatar>\n *\n * @input props: AvatarMetadata - Configuration for the avatar (image, size, box, default image)\n * @output onClick - Emits when the avatar is clicked\n */\nexport class AvatarComponent implements OnInit {\n @Input() props: AvatarMetadata;\n\n /**\n * Event emitted when the avatar is clicked.\n */\n @Output()\n onClick = new EventEmitter();\n\n constructor() {}\n\n ngOnInit() {}\n\n onClickHandler() {\n this.onClick.emit();\n }\n}\n","/* eslint-disable no-underscore-dangle */\n\n/**\n * Service for registering and managing custom Ionicons icons in the application.\n * Automatically registers a set of commonly used icons on initialization.\n */\n\nimport { Injectable } from '@angular/core';\nimport { addIcons } from 'ionicons';\nimport {\n addCircleOutline,\n addOutline,\n alertCircleOutline,\n alertOutline,\n arrowBackOutline,\n arrowDownOutline,\n arrowForwardOutline,\n businessOutline,\n calendarOutline,\n chatbubblesOutline,\n checkmarkCircleOutline,\n checkmarkOutline,\n chevronDownOutline,\n chevronForwardOutline,\n clipboardOutline,\n closeOutline,\n copyOutline,\n createOutline,\n documentTextOutline,\n ellipsisHorizontalOutline,\n eyeOffOutline,\n eyeOutline,\n filterOutline,\n heart,\n heartOutline,\n homeOutline,\n informationCircleOutline,\n locationOutline,\n lockClosedOutline,\n logoFacebook,\n logoInstagram,\n logoLinkedin,\n logoNpm,\n logoTiktok,\n logoTwitter,\n logoYoutube,\n notificationsOutline,\n openOutline,\n playOutline,\n refreshOutline,\n removeOutline,\n scanOutline,\n shareOutline,\n trashOutline,\n} from 'ionicons/icons';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class IconService {\n /**\n * Registers a set of Ionicons icons for use throughout the app.\n */\n constructor() {\n addIcons({\n addOutline,\n addCircleOutline,\n alertOutline,\n alertCircleOutline,\n arrowBackOutline,\n arrowForwardOutline,\n arrowDownOutline,\n checkmarkCircleOutline,\n ellipsisHorizontalOutline,\n notificationsOutline,\n openOutline,\n closeOutline,\n chatbubblesOutline,\n shareOutline,\n heart,\n heartOutline,\n homeOutline,\n eyeOffOutline,\n eyeOutline,\n scanOutline,\n chevronDownOutline,\n chevronForwardOutline,\n checkmarkOutline,\n clipboardOutline,\n copyOutline,\n filterOutline,\n locationOutline,\n calendarOutline,\n businessOutline,\n logoTwitter,\n logoInstagram,\n logoLinkedin,\n logoYoutube,\n logoTiktok,\n logoFacebook,\n createOutline,\n trashOutline,\n playOutline,\n refreshOutline,\n documentTextOutline,\n lockClosedOutline,\n informationCircleOutline,\n logoNpm,\n removeOutline,\n });\n }\n}\n","import { CommonModule, NgStyle } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IonCard, IonIcon } from '@ionic/angular/standalone';\nimport { IconService } from '../../../services/icons.service';\nimport { BoxMetadata } from './types';\n\n@Component({\n selector: 'val-box',\n standalone: true,\n imports: [CommonModule, IonCard, IonIcon, NgStyle],\n template: `\n <ion-card\n class=\"box\"\n [color]=\"props.color\"\n [class.rounded]=\"props.rounded\"\n [class.bordered]=\"props.bordered\"\n [class.transparent]=\"!props.color\"\n [class.left-border]=\"props.leftBorder\"\n [ngStyle]=\"{\n padding: props.padding ? props.padding : '0px',\n }\"\n >\n @if (props.icon) {\n <ion-icon class=\"icon\" [name]=\"props.icon\" (click)=\"clickHandler()\"></ion-icon>\n }\n <div\n [ngStyle]=\"{\n 'margin-right': props.icon ? '24px' : '0px',\n }\"\n >\n <ng-content select=\"[body]\"></ng-content>\n </div>\n </ion-card>\n `,\n styleUrls: ['./box.component.scss'],\n})\n/**\n * val-box\n *\n * A stylized card container for grouping content, with optional icon, color, border, and click event.\n *\n * @example\n * <val-box [props]=\"{ color: 'primary', rounded: true, icon: 'star' }\" (onClick)=\"handler()\">\n * <div body>Content here</div>\n * </val-box>\n *\n * @input props: BoxMetadata - Configuration for the box (color, icon, border, etc.)\n * @output onClick - Emits when the box or its icon is clicked\n */\nexport class BoxComponent implements OnInit {\n /**\n * Box configuration object.\n * @type {BoxMetadata}\n * @property color - The color of the box (Ionic color string).\n * @property icon - The name of the icon to display (optional).\n * @property bordered - Whether the box has a border (optional).\n * @property leftBorder - Whether the box has a left border (optional).\n * @property rounded - Whether the box has rounded corners (optional).\n * @property padding - Custom padding for the box (optional).\n */\n @Input()\n props: BoxMetadata;\n\n /**\n * Event emitted when the box or its icon is clicked.\n */\n @Output()\n onClick = new EventEmitter();\n\n constructor(icon: IconService) {}\n\n ngOnInit() {}\n\n clickHandler() {\n this.onClick.emit();\n }\n}\n","/**\n * Simplified content utilities for the new LangService-only system.\n * This replaces the old reactive-content.ts with a much simpler approach.\n */\n\n/**\n * Base metadata for components that support reactive content.\n * Simplified version that works directly with LangService.\n */\nexport interface ReactiveContentMetadata {\n /** Static content text (takes precedence over reactive content) */\n content?: string;\n /** Content key for reactive content from LangService */\n contentKey?: string;\n /** Component class name for content lookup */\n contentClass?: string;\n /** Fallback text if content is not found */\n contentFallback?: string;\n}\n\n/**\n * Extended metadata for text-based components with reactive content support.\n */\nexport interface ReactiveTextMetadata extends ReactiveContentMetadata {\n /** Static content text */\n content?: string;\n /** Content key for reactive lookup */\n contentKey?: string;\n /** Component class name */\n contentClass?: string;\n /** Fallback text */\n contentFallback?: string;\n}\n\n/**\n * Extended metadata for components that support content interpolation.\n */\nexport interface ReactiveContentWithInterpolation extends ReactiveContentMetadata {\n /** Interpolation data for parameterized content */\n contentInterpolation?: Record<string, string | number>;\n}\n\n/**\n * Helper function to determine if component should use reactive content.\n * @param metadata Component metadata\n * @returns True if component should use reactive content\n */\nexport function shouldUseReactiveContent(metadata: ReactiveContentMetadata): boolean {\n return !metadata.content && !!(metadata.contentKey && metadata.contentClass);\n}\n\n/**\n * Extract content configuration from metadata.\n * @param metadata Component metadata\n * @returns Content configuration for LangService\n */\nexport function extractContentConfig(metadata: ReactiveContentMetadata) {\n return {\n className: metadata.contentClass || '',\n key: metadata.contentKey || '',\n fallback: metadata.contentFallback,\n };\n}\n\n/**\n * Create reactive content metadata with defaults.\n * @param config Partial content configuration\n * @returns Complete reactive content metadata\n */\nexport function createReactiveContentMetadata(\n config: Partial<ReactiveContentMetadata>\n): ReactiveContentMetadata {\n return {\n content: config.content,\n contentKey: config.contentKey,\n contentClass: config.contentClass,\n contentFallback: config.contentFallback,\n };\n}\n\n/**\n * Interpolate content string with values.\n * Replaces placeholders like {{key}} or {key} with actual values.\n *\n * @param content - Content string with placeholders\n * @param values - Values to interpolate\n * @returns Interpolated string\n *\n * @example\n * ```typescript\n * interpolateContent('Hello {{name}}!', { name: 'World' })\n * // Returns: 'Hello World!'\n * ```\n */\nexport function interpolateContent(\n content: string,\n values?: Record<string, string | number>\n): string {\n if (!values || !content) {\n return content;\n }\n\n return content.replace(/\\{\\{?(\\w+)\\}?\\}/g, (match, key) => {\n const value = values[key];\n return value !== undefined ? String(value) : match;\n });\n}\n\n/**\n * Check if component should use reactive content with interpolation.\n * @param metadata Component metadata with interpolation\n * @returns True if component should use reactive content with interpolation\n */\nexport function shouldUseReactiveContentWithInterpolation(\n metadata: ReactiveContentWithInterpolation\n): boolean {\n return shouldUseReactiveContent(metadata) && !!metadata.contentInterpolation;\n}\n\n/**\n * Extract content configuration with interpolation from metadata.\n * @param metadata Component metadata with interpolation\n * @returns Content configuration for LangService with interpolation data\n */\nexport function extractContentConfigWithInterpolation(metadata: ReactiveContentWithInterpolation) {\n return {\n className: metadata.contentClass || '',\n key: metadata.contentKey || '',\n fallback: metadata.contentFallback,\n interpolation: metadata.contentInterpolation,\n };\n}\n\n/**\n * Helper function to get reactive content with interpolation using LangService.\n * This provides a unified way to get reactive, interpolated content.\n *\n * @param langService - The LangService instance\n * @param metadata - Component metadata with interpolation\n * @returns Observable that emits interpolated content\n *\n * @example\n * ```typescript\n * const content$ = fromContentWithInterpolation(this.langService, {\n * contentClass: 'MyComponent',\n * contentKey: 'greeting',\n * contentInterpolation: { name: 'World' }\n * });\n * ```\n */\nexport function fromContentWithInterpolation(\n langService: any, // LangService type would cause circular dependency\n metadata: ReactiveContentWithInterpolation\n): any {\n // Observable<string> but avoiding import\n const config = extractContentConfigWithInterpolation(metadata);\n\n if (!config.className || !config.key) {\n throw new Error('fromContentWithInterpolation requires both contentClass and contentKey');\n }\n\n return langService.getContentWithInterpolation(\n config.className,\n config.key,\n config.interpolation,\n config.fallback\n );\n}\n\n/**\n * Helper function to get static content with interpolation.\n * This provides interpolation for static content strings.\n *\n * @param content - Static content string\n * @param interpolationData - Values to interpolate\n * @returns Interpolated string\n */\nexport function interpolateStaticContent(\n content: string,\n interpolationData?: Record<string, string | number>\n): string {\n return interpolateContent(content, interpolationData);\n}\n","import { FormControl, ValidatorFn } from '@angular/forms';\nimport { Color } from '@ionic/core';\nimport { ImageMetadata } from './atoms/image/types';\n\n/**\n * Possible states for an interactive component.\n */\nexport type ComponentState = 'ENABLED' | 'DISABLED' | 'WORKING' | 'ERROR';\nconst ENABLED: ComponentState = 'ENABLED';\nconst DISABLED: ComponentState = 'DISABLED';\nconst WORKING: ComponentState = 'WORKING';\nconst ERROR: ComponentState = 'ERROR';\n\n/**\n * Object containing all possible component states.\n */\nexport const ComponentStates = { ENABLED, DISABLED, WORKING, ERROR };\n\n/**\n * Types of actions that a button or link can perform.\n */\nexport enum ActionType {\n BROWSER_NEW_TAB, // Open in a new browser tab\n BROWSER_DOWNLOAD, // Download via browser\n NATIVE_DOWNLOAD, // Download using native capabilities\n APP_NAVIGATION, // Internal app navigation\n BROWSER_NAVIGATION, // Navigation in the browser\n}\n\n/**\n * Represents an executable action for a button or link.\n */\nexport type Action = {\n /** Action description */\n description: string;\n /** Action type */\n type: ActionType;\n /** Action source or destination */\n source: string;\n};\n\n/**\n * Supported input types for forms.\n */\nexport enum InputType {\n TEXT,\n TEXTAREA,\n EMAIL,\n PASSWORD,\n COMMENT,\n NUMBER,\n NUMBER_FROM_TO,\n PIN_CODE,\n DATE,\n DATE_RANGE,\n HOUR,\n CHECK,\n RADIO,\n SELECT,\n SEARCH_SELECT,\n MULTI_SELECT,\n MULTI_SELECT_SIMPLE,\n FILE,\n TOGGLE,\n RANGE,\n PHONE,\n CURRENCY,\n}\n\n/**\n * Option for select, radio, etc. inputs.\n */\nexport type InputOption = {\n /** Unique option identifier */\n id: string;\n /** Display name */\n name: string;\n /** Whether the option is selected by default */\n selected?: boolean;\n /** Display order */\n order: number;\n};\n\n/**\n * Metadata for a form field.\n */\nexport type InputMetadata = {\n /** Associated form control */\n control: FormControl;\n /** From control (only for NUMBER_FROM_TO type) */\n fromControl?: FormControl;\n /** To control (only for NUMBER_FROM_TO type) */\n toControl?: FormControl;\n /** Unique token for the input */\n token: string;\n /** Display label */\n label: string;\n /** Field name */\n name: string;\n /** Help text */\n hint: string;\n /** Input placeholder */\n placeholder: string;\n /** Input type */\n type: InputType;\n /** Display order */\n order: number;\n /** Associated validators */\n validators: ValidatorFn[];\n /** Options (for select, radio, etc.) */\n options?: InputOption[];\n /** Allowed range (for number, date, etc.) */\n range?: {\n min: number;\n max: number;\n };\n /** Custom error messages */\n errors: {\n [key: string]: string;\n };\n /** Initial value for the field */\n value?: string;\n /** Default value configuration - string for custom defaults, true for auto defaults */\n withDefault?: string | boolean;\n /** Field state */\n state: ComponentState;\n /** Label for \"from\" field (only for NUMBER_FROM_TO type) */\n fromLabel?: string;\n /** Label for \"to\" field (only for NUMBER_FROM_TO type) */\n toLabel?: string;\n /** Placeholder for \"from\" field (only for NUMBER_FROM_TO type) */\n fromPlaceholder?: string;\n /** Placeholder for \"to\" field (only for NUMBER_FROM_TO type) */\n toPlaceholder?: string;\n};\n\n/**\n * A section in a form, grouping multiple fields.\n */\nexport type FormSection = {\n /** Section name */\n name: string;\n /** Display order */\n order: number;\n /** Fields included in the section */\n fields: InputMetadata[];\n};\n\n/**\n * Data sent when submitting a form.\n */\nexport type FormSubmit = {\n /** List of fields and their values */\n fields: { key: string; value: string }[];\n /** Optional token for the operation */\n token?: string;\n};\n\n/**\n * Metadata for a complete form.\n */\nexport type FormMetadata = {\n /** Form name */\n name: string;\n /** Form sections */\n sections: FormSection[];\n /** Action buttons configuration */\n actions: ButtonMetadata;\n /** Global form state */\n state: ComponentState;\n};\n\n/**\n * Possible action types for a toolbar.\n */\nexport enum ToolbarActionType {\n AVATAR = 'AVATAR',\n ICON = 'ICON',\n IMAGE = 'IMAGE',\n BUTTON = 'BUTTON',\n}\n\n/**\n * Toolbar action definition.\n */\nexport type ToolbarAction = {\n /** Action type */\n type: 'AVATAR' | 'ICON' | 'IMAGE' | 'BUTTON';\n /** Optional token identifier */\n token?: string;\n /** Toolbar position */\n position: 'left' | 'right' | 'center';\n /** Optional description */\n description?: string;\n /** Associated image (if any) */\n image?: ImageMetadata;\n};\n\n/**\n * Metadata for an icon.\n */\nexport interface IconMetada {\n /** Icon name */\n name: string;\n /** Icon slot position */\n slot: 'start' | 'end';\n}\n\n/**\n * Button configuration object.\n * Supports both static and reactive content.\n * @type {ButtonMetadata}\n * @property text - Static button label (takes precedence over textConfig).\n * @property textConfig - Reactive content configuration for button text.\n * @property color - The button color (Ionic color string).\n * @property icon - Icon to display (optional).\n * @property state - Button state (enabled, disabled, working, etc.).\n * @property expand, fill, size, shape, href, target, download, handler, etc. - See ButtonMetadata for all options.\n */\nexport interface ButtonMetadata {\n /** Associated action type */\n actionType?: ActionType;\n /** Button expansion */\n expand?: 'full' | 'block';\n /** Associated link */\n link?: string;\n /** Associated href link */\n href?: string;\n /** Link target */\n target?: '_blank' | '_self' | '_parent' | '_top';\n /** Download file name */\n download?: string;\n /** Button color */\n color: Color;\n /** Button state */\n state: ComponentState;\n /** Static display text (takes precedence over reactive content) */\n text?: string;\n /** Reactive content configuration for button text */\n contentKey?: string;\n /** Component class name for content lookup (required with contentKey) */\n contentClass?: string;\n /** Fallback text if contentKey is not found */\n contentFallback?: string;\n /** Values to interpolate into the content string */\n contentInterpolation?: Record<string, string | number>;\n /** Associated icon */\n icon?: IconMetada;\n /** Button shape */\n shape?: 'round';\n /** Button size */\n size?: 'small' | 'default' | 'large';\n /** Button fill */\n fill?: 'clear' | 'outline' | 'solid' | 'default';\n /** Button type */\n type: 'button' | 'submit' | 'reset';\n /** Optional token identifier */\n token?: string;\n /** Optional reference */\n ref?: any;\n /** Action handler */\n handler?: (value: any) => any | Promise<any>;\n}\n\n/**\n * Configuration for reactive content in val-button component.\n * Use this interface when you only need to specify content-related properties.\n * This follows the same pattern as TextContentConfig for consistency.\n */\nexport interface ButtonContentConfig {\n contentKey: string;\n contentClass: string;\n contentFallback?: string;\n contentInterpolation?: Record<string, string | number>;\n}\n","/**\n * Service for downloading files and opening links in new tabs.\n * Provides utility methods for browser-based file downloads and extracting file names from URLs.\n */\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DownloadService {\n /**\n * Extracts the file name from a given URL.\n * @param url The file URL\n * @returns The file name\n */\n getFileNameFromUrl(url: string): string {\n try {\n const pathSegments = url.split('/');\n const lastSegment = pathSegments[pathSegments.length - 1];\n const fileName = decodeURIComponent(lastSegment);\n return fileName;\n } catch (error) {\n console.error('Error al obtener nombre de archivo: ', JSON.stringify(error));\n return 'filename';\n }\n }\n\n /**\n * Opens a given URL in a new browser tab and triggers download if possible.\n * @param url The file URL\n */\n openNewTab(url: string): void {\n if (url) {\n const fileName = this.getFileNameFromUrl(url);\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n link.target = '_blank';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } else {\n console.error('La URL no está definida');\n }\n }\n\n /**\n * Downloads a file from the browser using fetch and triggers a download dialog.\n * @param url The file URL\n */\n downloadLinkFromBrowser(url: string): void {\n console.log('trying to download file from url');\n if (url) {\n fetch(url)\n .then(response => response.blob())\n .then(blob => {\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n\n const fileName = this.getFileNameFromUrl(url);\n link.download = `${+new Date()}-${fileName}`;\n link.target = '_self';\n link.click();\n\n window.URL.revokeObjectURL(url);\n })\n .catch(error => {\n console.error('Error al descargar el archivo:', JSON.stringify(error));\n });\n } else {\n console.error('La URL no está definida');\n }\n }\n}\n","/* eslint-disable no-underscore-dangle */\n\n/**\n * Service for opening URLs using Capacitor's InAppBrowser plugin.\n * Provides a method to open links in a popover-style browser within the app.\n */\nimport { Injectable } from '@angular/core';\nimport { Browser, OpenOptions } from '@capacitor/browser';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class InAppBrowserService {\n /**\n * Default options for the in-app browser.\n */\n options: OpenOptions = {\n presentationStyle: 'popover',\n url: '',\n };\n constructor() {}\n\n /**\n * Opens a URL using Capacitor's InAppBrowser with the configured options.\n * @param url The URL to open\n */\n async openWithInAppBrowser(url: string) {\n await Browser.open({ ...this.options, url });\n }\n}\n","import { Location } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\nimport { NavigationExtras, Router } from '@angular/router';\nimport { InAppBrowserService } from './in-app-browser.service';\n\n/**\n * Service for navigation and routing within the application.\n * Supports navigation with data transfer, in-app browser, and opening links in new tabs.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NavigationService {\n /**\n * Arbitrary data to be transferred during navigation.\n */\n data: any;\n router = inject(Router);\n location = inject(Location);\n inAppBrowser = inject(InAppBrowserService);\n\n constructor() {}\n\n /**\n * Opens a URL using the in-app browser service.\n * @param url The URL to open\n */\n navigateInApp(url: string) {\n this.inAppBrowser.openWithInAppBrowser(url);\n }\n\n /**\n * Navigates to a route and transfers data using Angular Router state.\n * @param route The route to navigate to\n * @param dataTransfer The data to transfer\n */\n navigateWithData(route: string, dataTransfer: any) {\n const navigationExtras: NavigationExtras = {\n state: {\n data: dataTransfer,\n },\n };\n\n this.router.navigate([route], navigationExtras);\n }\n\n /**\n * Navigates to a URL using Angular Router.\n * @param url The URL to navigate to\n */\n navigateByUrl(url: string) {\n this.router\n .navigateByUrl(url)\n .then(response => {})\n .catch(error => {});\n }\n\n /**\n * Opens a URL in a new browser tab.\n * @param url The URL to open\n */\n openInNewTab(url: string): void {\n window.open(url, '_blank', 'noopener,noreferrer');\n }\n\n /**\n * Navigates back to the previous page in the browser history.\n */\n back(): void {\n this.location.back();\n }\n}\n","export const LANG = 'LANG';\nexport const THEME = 'THEME';\n","/**\n * Utility service for interacting with browser localStorage in a type-safe way.\n * Provides static methods for setting, getting, removing, and clearing items.\n */\nexport class LocalStorageService {\n /**\n * Stores a value in localStorage under the given reference key.\n * @param reference The key to store the value under\n * @param value The value to store\n */\n static set<T>(reference: string, value: T): void {\n localStorage.setItem(reference, JSON.stringify(value));\n }\n\n /**\n * Retrieves a value from localStorage by key.\n * @param reference The key to retrieve\n * @returns The parsed value\n */\n static get<T>(reference: string): T {\n const value = localStorage.getItem(reference);\n return JSON.parse(value) as T;\n }\n\n /**\n * Removes an item from localStorage by key.\n * @param reference The key to remove\n */\n static remove(reference: string): void {\n localStorage.removeItem(reference);\n }\n\n /**\n * Clears all items from localStorage.\n */\n static clear() {\n localStorage.clear();\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { Provider } from './lang-provider/content';\n\nexport interface ValtechConfig {\n content: Provider;\n}\n\nexport const ValtechConfigService = new InjectionToken<ValtechConfig>('ValtechConfig');\n","export type LanguageText = {\n [key: string]: string;\n};\n\nexport type LanguagesContent = {\n [key: string]: LanguageText;\n};\n\nexport class TextContent {\n text: LanguagesContent;\n constructor(text: LanguagesContent) {\n this.text = text;\n }\n\n get Content(): LanguagesContent {\n return this.text;\n }\n}\n\n/**\n * Language code type - supports any valid language code string.\n * Common examples: 'es', 'en', 'fr', 'de', 'pt', 'it', 'zh', 'ja', etc.\n */\nexport type LangOption = string;\n\n/**\n * Common language constants for convenience.\n * Users can still use any language code string directly.\n */\nexport const LANGUAGES = {\n ES: 'es' as const,\n EN: 'en' as const,\n FR: 'fr' as const,\n DE: 'de' as const,\n PT: 'pt' as const,\n IT: 'it' as const,\n ZH: 'zh' as const,\n JA: 'ja' as const,\n} as const;\n","import { Inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, distinctUntilChanged, map, shareReplay } from 'rxjs';\nimport { LANG } from '../../shared/constants/storage';\nimport { LocalStorageService } from '../local-storage.service';\nimport { ValtechConfig, ValtechConfigService } from '../types';\nimport { Provider } from './content';\nimport { LANGUAGES, LangOption, LanguageText, LanguagesContent, TextContent } from './types';\n\n/**\n * LangService - Reactive language and content management service.\n *\n * This service provides reactive content management with Observable-based language switching.\n * Components can subscribe to content changes and automatically update when the language changes.\n *\n * The service automatically detects available languages from the content configuration\n * and provides intelligent fallbacks with console warnings for missing translations.\n *\n * @example Basic usage:\n * ```typescript\n * constructor(private langService: LangService) {}\n *\n * // Get current language\n * const currentLang = this.langService.currentLang;\n *\n * // Subscribe to language changes\n * this.langService.currentLang$.subscribe(lang => console.log('Language changed:', lang));\n *\n * // Get static text\n * const text = this.langService.getText('ComponentName', 'textKey');\n *\n * // Get reactive text\n * const text$ = this.langService.getContent('ComponentName', 'textKey');\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class LangService {\n private content: Provider;\n private defaultLang: LangOption;\n private availableLanguages: LangOption[] = [];\n private selectedLang: BehaviorSubject<LangOption>;\n private config: ValtechConfig;\n private warnedMissingLanguages = new Set<string>();\n\n constructor(@Inject(ValtechConfigService) config: ValtechConfig) {\n console.log('LangService: Injected config:', config);\n this.content = config.content;\n this.config = config;\n\n // Detect available languages from content\n this.detectAvailableLanguages();\n\n // Set default language (prefer Spanish, then English, then first available)\n this.defaultLang = this.determineDefaultLanguage();\n\n // Initialize with stored language or default\n const current = LocalStorageService.get<LangOption>(LANG);\n const initialLang = this.validateLanguage(current) || this.defaultLang;\n\n this.selectedLang = new BehaviorSubject<LangOption>(initialLang);\n\n console.log('LangService: Initialized with languages:', {\n available: this.availableLanguages,\n default: this.defaultLang,\n current: initialLang,\n });\n }\n\n /**\n * Detect available languages from the content configuration.\n * Scans all component content to find which languages are actually configured.\n */\n private detectAvailableLanguages(): void {\n const languageSet = new Set<LangOption>();\n\n Object.values(this.content).forEach(componentContent => {\n if (componentContent?.Content) {\n Object.keys(componentContent.Content).forEach(lang => {\n languageSet.add(lang);\n });\n }\n });\n\n this.availableLanguages = Array.from(languageSet).sort();\n\n if (this.availableLanguages.length === 0) {\n console.warn('LangService: No languages detected in content configuration!');\n this.availableLanguages = [LANGUAGES.ES]; // Fallback\n }\n }\n\n /**\n * Determine the best default language based on available content.\n */\n private determineDefaultLanguage(): LangOption {\n // Preference order: Spanish, English, then first available\n const preferredOrder = [LANGUAGES.ES, LANGUAGES.EN];\n\n for (const preferred of preferredOrder) {\n if (this.availableLanguages.includes(preferred)) {\n return preferred;\n }\n }\n\n return this.availableLanguages[0];\n }\n\n /**\n * Validate if a language is available in the content.\n */\n private validateLanguage(lang: LangOption | null): LangOption | null {\n if (!lang) return null;\n return this.availableLanguages.includes(lang) ? lang : null;\n }\n\n /**\n * Get the best available language for a component and key.\n * Provides intelligent fallback with warnings.\n */\n private getBestAvailableContent(\n className: string,\n key: string,\n requestedLang: LangOption\n ): {\n content: string | undefined;\n actualLang: LangOption;\n shouldWarn: boolean;\n } {\n const componentContent = this.content[className];\n\n if (!componentContent) {\n return {\n content: undefined,\n actualLang: requestedLang,\n shouldWarn: false,\n };\n }\n\n // Try requested language first\n const requestedContent = componentContent.Content[requestedLang];\n if (requestedContent?.[key]) {\n return {\n content: requestedContent[key],\n actualLang: requestedLang,\n shouldWarn: false,\n };\n }\n\n // Language not available, try fallbacks\n const warningKey = `${className}.${key}.${requestedLang}`;\n const shouldWarn = !this.warnedMissingLanguages.has(warningKey);\n\n if (shouldWarn) {\n this.warnedMissingLanguages.add(warningKey);\n }\n\n // Try default language\n if (requestedLang !== this.defaultLang) {\n const defaultContent = componentContent.Content[this.defaultLang];\n if (defaultContent?.[key]) {\n return {\n content: defaultContent[key],\n actualLang: this.defaultLang,\n shouldWarn,\n };\n }\n }\n\n // Try first available language\n for (const availableLang of this.availableLanguages) {\n const availableContent = componentContent.Content[availableLang];\n if (availableContent?.[key]) {\n return {\n content: availableContent[key],\n actualLang: availableLang,\n shouldWarn,\n };\n }\n }\n\n return {\n content: undefined,\n actualLang: requestedLang,\n shouldWarn,\n };\n }\n\n /**\n * Observable that emits the current language whenever it changes.\n * Use this to subscribe to language changes in components.\n */\n get currentLang$(): Observable<LangOption> {\n return this.selectedLang.asObservable().pipe(\n distinctUntilChanged(),\n shareReplay(1) // Ensure new subscribers get the current value\n );\n }\n\n /**\n * Get the current language synchronously.\n */\n get currentLang(): LangOption {\n return this.selectedLang.value;\n }\n\n /**\n * Get array of available languages detected from content.\n */\n get availableLangs(): LangOption[] {\n return [...this.availableLanguages];\n }\n\n /**\n * Get the default language.\n */\n get defaultLanguage(): LangOption {\n return this.defaultLang;\n }\n\n /**\n * Set the current language and persist it to localStorage.\n * This will trigger updates in all reactive content subscriptions.\n *\n * Validates that the language is available and warns if not.\n *\n * @param lang - The language to set\n */\n setLang(lang: LangOption): void {\n if (!this.availableLanguages.includes(lang)) {\n console.warn(\n `LangService: Language \"${lang}\" is not available. Available languages:`,\n this.availableLanguages\n );\n console.warn(`LangService: Falling back to default language \"${this.defaultLang}\"`);\n lang = this.defaultLang;\n }\n\n this.selectedLang.next(lang);\n LocalStorageService.set<LangOption>(LANG, lang);\n }\n\n /**\n * Get content for a component class and key (legacy method).\n *\n * @deprecated Use getText() or getContent() for better type safety\n */\n Text(className: string): LanguageText {\n const componentContent = this.content[className];\n return componentContent?.Content[this.selectedLang.value] || {};\n }\n\n /**\n * Get a single content string synchronously for the current language.\n * Provides intelligent fallback with warnings for missing translations.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param fallback - Optional fallback text if key is not found\n * @returns The text string or fallback\n */\n getText(className: string, key: string, fallback?: string): string {\n const result = this.getBestAvailableContent(className, key, this.selectedLang.value);\n\n if (result.shouldWarn && result.actualLang !== this.selectedLang.value) {\n console.warn(\n `LangService: Content \"${className}.${key}\" not available in \"${this.selectedLang.value}\".`,\n `Using \"${result.actualLang}\" instead. Available languages:`,\n this.availableLanguages\n );\n }\n\n return result.content || fallback || `[${className}.${key}]`;\n }\n\n /**\n * Get a reactive Observable for a specific text key that updates when language changes.\n * This is the recommended method for components that need reactive content.\n * Provides intelligent fallback with warnings for missing translations.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param fallback - Optional fallback text if key is not found\n * @returns Observable that emits the text string whenever language changes\n */\n getContent(className: string, key: string, fallback?: string): Observable<string> {\n return this.currentLang$.pipe(\n map(lang => {\n const result = this.getBestAvailableContent(className, key, lang);\n\n if (result.shouldWarn && result.actualLang !== lang) {\n console.warn(\n `LangService: Content \"${className}.${key}\" not available in \"${lang}\".`,\n `Using \"${result.actualLang}\" instead. Available languages:`,\n this.availableLanguages\n );\n }\n\n return result.content || fallback || `[${className}.${key}]`;\n }),\n distinctUntilChanged()\n );\n }\n\n /**\n * Get reactive content for multiple keys at once.\n * Provides intelligent fallback with warnings for missing translations.\n *\n * @param className - The component class name\n * @param keys - Array of text keys to retrieve\n * @returns Observable that emits an object with all requested keys\n */\n getMultipleContent(className: string, keys: string[]): Observable<Record<string, string>> {\n return this.currentLang$.pipe(\n map(lang => {\n const result: Record<string, string> = {};\n\n keys.forEach(key => {\n const contentResult = this.getBestAvailableContent(className, key, lang);\n\n if (contentResult.shouldWarn && contentResult.actualLang !== lang) {\n console.warn(\n `LangService: Content \"${className}.${key}\" not available in \"${lang}\".`,\n `Using \"${contentResult.actualLang}\" instead.`\n );\n }\n\n result[key] = contentResult.content || `[${className}.${key}]`;\n });\n\n return result;\n }),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n /**\n * Check if a content key exists for a component in any available language.\n *\n * @param className - The component class name\n * @param key - The text key\n * @returns True if the key exists in any language\n */\n hasContent(className: string, key: string): boolean {\n const classContent = this.content[className];\n if (!classContent) return false;\n\n return Object.values(classContent.Content).some(\n langContent => langContent && typeof langContent[key] === 'string'\n );\n }\n\n /**\n * Check if a content key exists for a component in a specific language.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param lang - The language to check (defaults to current language)\n * @returns True if the key exists in the specified language\n */\n hasContentInLanguage(className: string, key: string, lang?: LangOption): boolean {\n const targetLang = lang || this.currentLang;\n const classContent = this.content[className]?.Content[targetLang];\n return classContent && typeof classContent[key] === 'string';\n }\n\n /**\n * Get available languages for a specific component.\n *\n * @param className - The component class name\n * @returns Array of language codes available for the component\n */\n getAvailableLanguagesForComponent(className: string): LangOption[] {\n const classContent = this.content[className];\n if (!classContent) return [];\n\n return Object.keys(classContent.Content).filter(\n lang => classContent.Content[lang] && Object.keys(classContent.Content[lang]).length > 0\n );\n }\n\n /**\n * Get missing content keys for a component in a specific language.\n * Useful for identifying incomplete translations.\n *\n * @param className - The component class name\n * @param lang - The language to check\n * @param referenceLang - The reference language to compare against (defaults to default language)\n * @returns Array of missing keys\n */\n getMissingContentKeys(className: string, lang: LangOption, referenceLang?: LangOption): string[] {\n const refLang = referenceLang || this.defaultLang;\n const classContent = this.content[className];\n\n if (!classContent) return [];\n\n const referenceContent = classContent.Content[refLang] || {};\n const targetContent = classContent.Content[lang] || {};\n\n return Object.keys(referenceContent).filter(\n key => !targetContent[key] || typeof targetContent[key] !== 'string'\n );\n }\n\n /**\n * Register or update content for a component dynamically.\n * This allows registering content at runtime without APP_INITIALIZER.\n *\n * @param className - The component class name\n * @param content - The multilingual content object\n * @param merge - Whether to merge with existing content (default: true)\n *\n * @example\n * ```typescript\n * this.langService.registerContent('MyComponent', {\n * [LANGUAGES.ES]: { title: 'Título', description: 'Descripción' },\n * [LANGUAGES.EN]: { title: 'Title', description: 'Description' }\n * });\n * ```\n */\n registerContent(className: string, content: LanguagesContent, merge: boolean = true): void {\n if (!className) {\n console.error('LangService: className is required for registerContent');\n return;\n }\n\n if (!content || typeof content !== 'object') {\n console.error('LangService: Invalid content provided for registerContent');\n return;\n }\n\n console.log(`LangService: Registering content for \"${className}\"`, {\n merge,\n languages: Object.keys(content),\n });\n\n // Initialize component content if it doesn't exist\n if (!this.content[className]) {\n this.content[className] = new TextContent({});\n }\n\n // Merge or replace content for each language\n Object.entries(content).forEach(([lang, langContent]) => {\n if (!langContent || typeof langContent !== 'object') {\n console.warn(`LangService: Invalid content for language \"${lang}\" in \"${className}\"`);\n return;\n }\n\n if (!this.content[className].Content[lang]) {\n this.content[className].Content[lang] = {};\n }\n\n if (merge) {\n this.content[className].Content[lang] = {\n ...this.content[className].Content[lang],\n ...langContent,\n };\n } else {\n this.content[className].Content[lang] = { ...langContent };\n }\n });\n\n // Update available languages\n this.detectAvailableLanguages();\n\n console.log(`LangService: Content registered successfully for \"${className}\"`);\n }\n\n /**\n * Update multiple content registrations at once.\n *\n * @param contentMap - Map of className to content\n * @param merge - Whether to merge with existing content (default: true)\n *\n * @example\n * ```typescript\n * this.langService.registerMultipleContent({\n * 'Component1': { [LANGUAGES.ES]: { key1: 'valor1' } },\n * 'Component2': { [LANGUAGES.EN]: { key2: 'value2' } }\n * });\n * ```\n */\n registerMultipleContent(\n contentMap: Record<string, LanguagesContent>,\n merge: boolean = true\n ): void {\n if (!contentMap || typeof contentMap !== 'object') {\n console.error('LangService: Invalid contentMap provided for registerMultipleContent');\n return;\n }\n\n console.log('LangService: Registering multiple content entries', {\n classes: Object.keys(contentMap),\n merge,\n });\n\n Object.entries(contentMap).forEach(([className, content]) => {\n this.registerContent(className, content, merge);\n });\n\n console.log('LangService: Multiple content registration completed');\n }\n\n /**\n * Remove content for a specific component.\n *\n * @param className - The component class name to remove\n */\n removeContent(className: string): void {\n if (!className) {\n console.error('LangService: className is required for removeContent');\n return;\n }\n\n if (this.content[className]) {\n delete this.content[className];\n this.detectAvailableLanguages();\n console.log(`LangService: Content removed for \"${className}\"`);\n } else {\n console.warn(`LangService: No content found for \"${className}\" to remove`);\n }\n }\n\n /**\n * Get a list of all registered component classes.\n *\n * @returns Array of registered class names\n */\n getRegisteredClasses(): string[] {\n return Object.keys(this.content);\n }\n\n /**\n * Get the complete content configuration (for debugging purposes).\n * Returns a deep copy to prevent accidental mutations.\n *\n * @returns Complete content configuration\n */\n getContentConfiguration(): Provider {\n return JSON.parse(JSON.stringify(this.content));\n }\n\n /**\n * Clear all content and reset to initial state.\n * Useful for testing or complete reinitialization.\n */\n clearAllContent(): void {\n console.log('LangService: Clearing all content');\n this.content = {};\n this.availableLanguages = [LANGUAGES.ES]; // Reset to default\n this.warnedMissingLanguages.clear();\n console.log('LangService: All content cleared');\n }\n\n /**\n * Get content with interpolation support.\n * Retrieves content and replaces placeholders with provided values.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param interpolationData - Object with values to interpolate\n * @param fallback - Optional fallback text if key is not found\n * @returns Text with interpolated values\n */\n getTextWithInterpolation(\n className: string,\n key: string,\n interpolationData?: Record<string, string | number>,\n fallback?: string\n ): string {\n const content = this.getText(className, key, fallback);\n return this.interpolateString(content, interpolationData);\n }\n\n /**\n * Get reactive content with interpolation support.\n * Returns an Observable that emits interpolated content when language changes.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param interpolationData - Object with values to interpolate\n * @param fallback - Optional fallback text if key is not found\n * @returns Observable that emits interpolated text\n */\n getContentWithInterpolation(\n className: string,\n key: string,\n interpolationData?: Record<string, string | number>,\n fallback?: string\n ): Observable<string> {\n return this.getContent(className, key, fallback).pipe(\n map(content => this.interpolateString(content, interpolationData))\n );\n }\n\n /**\n * Interpolate a string with provided values.\n * Replaces placeholders like {{key}} or {key} with actual values.\n *\n * @param content - Content string with placeholders\n * @param values - Values to interpolate\n * @returns Interpolated string\n *\n * @example\n * ```typescript\n * interpolateString('Hello {{name}}!', { name: 'World' })\n * // Returns: 'Hello World!'\n * ```\n */\n private interpolateString(content: string, values?: Record<string, string | number>): string {\n if (!values || !content) {\n return content;\n }\n\n return content.replace(/\\{\\{?(\\w+)\\}?\\}/g, (match, key) => {\n const value = values[key];\n return value !== undefined ? String(value) : match;\n });\n }\n\n /**\n * Legacy function equivalent to the old fromContentWithInterpolation.\n * Provides reactive content with interpolation support for backward compatibility.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param interpolationData - Object with values to interpolate\n * @param fallback - Optional fallback text if key is not found\n * @returns Observable that emits interpolated text\n *\n * @deprecated Use getContentWithInterpolation instead\n */\n fromContentWithInterpolation(\n className: string,\n key: string,\n interpolationData?: Record<string, string | number>,\n fallback?: string\n ): Observable<string> {\n return this.getContentWithInterpolation(className, key, interpolationData, fallback);\n }\n\n // Legacy getters/setters for backward compatibility\n get Lang(): LangOption {\n return this.currentLang;\n }\n\n set Lang(lang: LangOption) {\n this.setLang(lang);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { IonButton, IonIcon, IonSpinner, IonText } from '@ionic/angular/standalone';\nimport { Observable, Subscription, of } from 'rxjs';\nimport { DownloadService } from '../../../services/download.service';\nimport { IconService } from '../../../services/icons.service';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { NavigationService } from '../../../services/navigation.service';\nimport { interpolateStaticContent } from '../../../shared/utils/simple-content';\nimport { ActionType, ButtonContentConfig, ButtonMetadata, ComponentStates } from '../../types';\n\n@Component({\n selector: 'val-button',\n standalone: true,\n imports: [CommonModule, IonButton, IonIcon, IonSpinner, IonText],\n template: `\n <ion-button\n [type]=\"props.type\"\n [color]=\"props.color\"\n [expand]=\"props.expand\"\n [fill]=\"props.fill\"\n [size]=\"props.size\"\n [href]=\"props.href\"\n [target]=\"props.target\"\n [shape]=\"props.shape\"\n (click)=\"clickHandler()\"\n [disabled]=\"props.state === states.DISABLED\"\n [ngClass]=\"[props.size]\"\n >\n <ion-icon *ngIf=\"props.icon\" [slot]=\"props.icon.slot\" [name]=\"props.icon.name\"></ion-icon>\n <ion-spinner *ngIf=\"props.state === states.WORKING\" name=\"circular\"></ion-spinner>\n <ion-text *ngIf=\"props.state !== states.WORKING\">{{ displayText$ | async }}</ion-text>\n </ion-button>\n `,\n styleUrls: ['./button.component.scss'],\n})\n/**\n * val-button\n *\n * A customizable button supporting icons, loading state, navigation, and reactive content.\n * Supports both static text and reactive content from the content service.\n * Follows the same content pattern as val-text for consistency.\n *\n * @example Static text:\n * <val-button [props]=\"{\n * text: 'Save',\n * color: 'primary',\n * type: 'button',\n * state: 'ENABLED',\n * icon: { name: 'save', slot: 'start' }\n * }\" (onClick)=\"handler()\"></val-button>\n *\n * @example Reactive content:\n * <val-button [props]=\"{\n * contentKey: 'save',\n * contentClass: 'MyComponent',\n * contentFallback: 'Save',\n * color: 'primary',\n * type: 'button',\n * state: 'ENABLED',\n * icon: { name: 'save', slot: 'start' }\n * }\" (onClick)=\"handler()\"></val-button>\n *\n * @example Reactive content with interpolation:\n * <val-button [props]=\"{\n * contentKey: 'saveCount',\n * contentClass: 'MyComponent',\n * contentInterpolation: { count: 5 },\n * contentFallback: 'Save Items',\n * color: 'primary',\n * type: 'button',\n * state: 'ENABLED'\n * }\" (onClick)=\"handler()\"></val-button>\n *\n * @input props: ButtonMetadata - Configuration for the button (text/content, color, icon, state, etc.)\n * @output onClick - Emits when the button is clicked\n */\nexport class ButtonComponent implements OnInit, OnDestroy {\n states = ComponentStates;\n\n /**\n * Observable that provides the text content to display.\n * This will be either static text or reactive content from the language service.\n */\n displayText$: Observable<string>;\n\n private subscriptions = new Subscription();\n\n @Input()\n props!: ButtonMetadata;\n\n /**\n * Event emitted when the button is clicked.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor(\n private download: DownloadService,\n icon: IconService,\n private navigation: NavigationService,\n private langService: LangService\n ) {}\n\n ngOnInit() {\n this.setupDisplayText();\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n\n /**\n * Set up the text content observable based on the props configuration.\n * Priority: static text > reactive content with interpolation > reactive content\n * This follows the same pattern as val-text component.\n */\n private setupDisplayText(): void {\n if (this.props.text) {\n // Static text takes precedence\n if (this.props.contentInterpolation) {\n // Static text with interpolation\n const interpolatedText = interpolateStaticContent(this.props.text, this.props.contentInterpolation);\n this.displayText$ = of(interpolatedText);\n } else {\n // Simple static text\n this.displayText$ = of(this.props.text);\n }\n } else if (this.props.contentKey && this.props.contentClass) {\n // Reactive content from language service\n if (this.props.contentInterpolation) {\n // With interpolation\n this.displayText$ = this.langService.getContentWithInterpolation(\n this.props.contentClass,\n this.props.contentKey,\n this.props.contentInterpolation,\n this.props.contentFallback\n );\n } else {\n // Simple reactive content\n this.displayText$ = this.langService.getContent(\n this.props.contentClass,\n this.props.contentKey,\n this.props.contentFallback\n );\n }\n } else {\n // Fallback to empty string if no valid content configuration\n console.warn(\n 'val-button: No valid content configuration provided. Use either \"text\" for static text or \"contentKey\" + \"contentClass\" for reactive content.'\n );\n this.displayText$ = of(this.props.contentFallback || '');\n }\n }\n\n clickHandler() {\n if (this.props.state === this.states.DISABLED) {\n return;\n }\n\n if (this.props.actionType === ActionType.APP_NAVIGATION) {\n this.navigation.navigateByUrl(this.props.link);\n }\n\n if (this.props.download) {\n this.download.downloadLinkFromBrowser(this.props.download);\n }\n\n if (this.props.handler) {\n this.props.handler(this.props.ref);\n }\n\n this.onClick.emit(this.props.token);\n }\n}\n\n/**\n * Helper function to create reactive button props from content configuration.\n * This provides a convenient way to create val-button props with reactive content.\n * Follows the same pattern as createTextProps for consistency.\n *\n * @param contentConfig - Content configuration\n * @param styleConfig - Optional style and behavior configuration\n * @returns ButtonMetadata with content properties set\n *\n * @example\n * ```typescript\n * // In component\n * saveButtonProps: ButtonMetadata = createButtonProps({\n * contentKey: 'save',\n * contentClass: 'MyComponent'\n * }, {\n * color: 'primary',\n * icon: { name: 'save', slot: 'start' }\n * });\n * ```\n */\nexport function createButtonProps(\n contentConfig: ButtonContentConfig,\n styleConfig: Partial<\n Pick<ButtonMetadata, 'color' | 'type' | 'state' | 'size' | 'fill' | 'icon' | 'expand' | 'shape' | 'handler'>\n > = {}\n): ButtonMetadata {\n return {\n contentKey: contentConfig.contentKey,\n contentClass: contentConfig.contentClass,\n contentFallback: contentConfig.contentFallback,\n contentInterpolation: contentConfig.contentInterpolation,\n color: styleConfig.color || 'primary',\n type: styleConfig.type || 'button',\n state: styleConfig.state || ComponentStates.ENABLED,\n size: styleConfig.size,\n fill: styleConfig.fill,\n icon: styleConfig.icon,\n expand: styleConfig.expand,\n shape: styleConfig.shape,\n handler: styleConfig.handler,\n };\n}\n","import { ButtonMetadata, IconMetada } from '../../types';\n\nexport const Icon = (name: string, slot: 'start' | 'end'): IconMetada => {\n return {\n name,\n slot,\n };\n};\n\n/* name convention: COLOR FILL SIZE [optionals: SHAPE EXPAND ICON HREF/DOWNLOAD] TYPE */\n\nexport const BaseDefault = (text: string, type: 'button' | 'submit' | 'reset'): ButtonMetadata => {\n return {\n color: 'primary',\n state: 'ENABLED',\n text,\n size: 'default',\n type,\n };\n};\n\nexport const ClearDefault = (text: string, type: 'button' | 'submit' | 'reset'): ButtonMetadata => {\n return { ...BaseDefault(text, type), fill: 'clear' };\n};\n\nexport const ClearDefaultRound = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...ClearDefault(text, type), shape: 'round' };\n};\n\nexport const SolidDefault = (text: string, type: 'button' | 'submit' | 'reset'): ButtonMetadata => {\n return { ...BaseDefault(text, type), fill: 'solid' };\n};\n\nexport const SolidDefaultRound = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...SolidDefault(text, type), shape: 'round' };\n};\n\nexport const OutlineDefault = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...BaseDefault(text, type), fill: 'outline' };\n};\n\nexport const OutlineDefaultRound = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...OutlineDefault(text, type), shape: 'round' };\n};\n\nexport const ClearDefaultFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...ClearDefault(text, type), expand: 'full' };\n};\n\nexport const ClearDefaultRoundFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...ClearDefaultRound(text, type), expand: 'full' };\n};\n\nexport const ClearDefaultBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...ClearDefault(text, type), expand: 'block' };\n};\n\nexport const ClearDefaultRoundBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...ClearDefaultRound(text, type), expand: 'block' };\n};\n\nexport const SolidDefaultFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...SolidDefault(text, type), expand: 'full' };\n};\n\nexport const SolidDefaultRoundFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...SolidDefaultRound(text, type), expand: 'full' };\n};\n\nexport const SolidDefaultBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...SolidDefault(text, type), expand: 'block' };\n};\n\nexport const SolidDefaultRoundBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...SolidDefaultRound(text, type), expand: 'block' };\n};\n\nexport const OutlineDefaultFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...OutlineDefault(text, type), expand: 'full' };\n};\n\nexport const OutlineDefaultRoundFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...OutlineDefaultRound(text, type), expand: 'full' };\n};\n\nexport const OutlineDefaultBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...OutlineDefault(text, type), expand: 'block' };\n};\n\nexport const OutlineDefaultRoundBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...OutlineDefaultRound(text, type), expand: 'block' };\n};\n\nexport const SolidDefaultButton = (text: string): ButtonMetadata => {\n return SolidDefault(text, 'button');\n};\n\nexport const SolidSmallButton = (text: string): ButtonMetadata => {\n return { ...SolidDefault(text, 'button'), size: 'small' };\n};\n\nexport const SolidLargeButton = (text: string): ButtonMetadata => {\n return { ...SolidDefault(text, 'button'), size: 'large' };\n};\n\nexport const SolidDefaultRoundButton = (text: string): ButtonMetadata => {\n return SolidDefaultRound(text, 'button');\n};\n\nexport const SolidSmallRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidDefaultRound(text, 'button'), size: 'small' };\n};\n\nexport const SolidLargeRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidDefaultRound(text, 'button'), size: 'large' };\n};\n\nexport const SolidFullButton = (text: string): ButtonMetadata => {\n return SolidDefaultFull(text, 'button');\n};\n\nexport const SolidBlockButton = (text: string): ButtonMetadata => {\n return SolidDefaultBlock(text, 'button');\n};\n\n/** PRIMARY */\n\nexport const PrimarySolidDefaultRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidDefaultRoundButton(text), color: 'primary' };\n};\n\nexport const PrimarySolidDefaultRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...PrimarySolidDefaultRoundButton(text), icon };\n};\n\nexport const PrimarySolidDefaultRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidDefaultRoundButton(text), href, target };\n};\n\nexport const PrimarySolidDefaultRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidDefaultRoundIconButton(text, icon), href, target };\n};\n\nexport const PrimarySolidSmallRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidSmallRoundButton(text), color: 'primary' };\n};\n\nexport const PrimarySolidSmallRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...PrimarySolidSmallRoundButton(text), icon };\n};\n\nexport const PrimarySolidSmallRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidSmallRoundButton(text), href, target };\n};\n\nexport const PrimarySolidSmallRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidSmallRoundIconButton(text, icon), href, target };\n};\n\nexport const PrimarySolidLargeRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidLargeRoundButton(text), color: 'primary' };\n};\n\nexport const PrimarySolidLargeRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...PrimarySolidLargeRoundButton(text), icon };\n};\n\nexport const PrimarySolidLargeRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidLargeRoundButton(text), href, target };\n};\n\nexport const PrimarySolidLargeRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidLargeRoundIconButton(text, icon), href, target };\n};\n\nexport const PrimarySolidBlockButton = (text: string): ButtonMetadata => {\n return { ...SolidBlockButton(text), color: 'primary' };\n};\n\nexport const PrimarySolidBlockIconButton = (text: string, icon: IconMetada): ButtonMetadata => {\n return { ...PrimarySolidBlockButton(text), icon };\n};\n\nexport const PrimarySolidBlockHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidBlockButton(text), href, target };\n};\n\nexport const PrimarySolidBlockIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidBlockIconButton(text, icon), href, target };\n};\n\nexport const PrimarySolidFullButton = (text: string): ButtonMetadata => {\n return { ...SolidFullButton(text), color: 'primary' };\n};\n\nexport const PrimarySolidFullIconButton = (text: string, icon: IconMetada): ButtonMetadata => {\n return { ...PrimarySolidFullButton(text), icon };\n};\n\nexport const PrimarySolidFullHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidFullButton(text), href, target };\n};\n\nexport const PrimarySolidFullIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidFullIconButton(text, icon), href, target };\n};\n\n/** SECONDARY */\n\nexport const SecondarySolidDefaultRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidDefaultRoundButton(text), color: 'secondary' };\n};\n\nexport const SecondarySolidDefaultRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...SecondarySolidDefaultRoundButton(text), icon };\n};\n\nexport const SecondarySolidDefaultRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidDefaultRoundButton(text), href, target };\n};\n\nexport const SecondarySolidDefaultRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidDefaultRoundIconButton(text, icon), href, target };\n};\n\nexport const SecondarySolidSmallRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidSmallRoundButton(text), color: 'secondary' };\n};\n\nexport const SecondarySolidSmallRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...SecondarySolidSmallRoundButton(text), icon };\n};\n\nexport const SecondarySolidSmallRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidSmallRoundButton(text), href, target };\n};\n\nexport const SecondarySolidSmallRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidSmallRoundIconButton(text, icon), href, target };\n};\n\nexport const SecondarySolidLargeRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidLargeRoundButton(text), color: 'secondary' };\n};\n\nexport const SecondarySolidLargeRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...SecondarySolidLargeRoundButton(text), icon };\n};\n\nexport const SecondarySolidLargeRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidLargeRoundButton(text), href, target };\n};\n\nexport const SecondarySolidLargeRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidLargeRoundIconButton(text, icon), href, target };\n};\n\nexport const SecondarySolidFullButton = (text: string): ButtonMetadata => {\n return { ...SolidFullButton(text), color: 'secondary' };\n};\n\nexport const SecondarySolidFullIconButton = (text: string, icon: IconMetada): ButtonMetadata => {\n return { ...SecondarySolidFullButton(text), icon };\n};\n\nexport const SecondarySolidFullHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidFullButton(text), href, target };\n};\n\nexport const SecondarySolidFullIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidFullIconButton(text, icon), href, target };\n};\n\nexport const SecondarySolidBlockButton = (text: string): ButtonMetadata => {\n return { ...SolidBlockButton(text), color: 'secondary' };\n};\n\nexport const SecondarySolidBlockIconButton = (text: string, icon: IconMetada): ButtonMetadata => {\n return { ...SecondarySolidBlockButton(text), icon };\n};\n\nexport const SecondarySolidBlockHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidBlockButton(text), href, target };\n};\n\nexport const SecondarySolidBlockIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidBlockIconButton(text, icon), href, target };\n};\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport { IonText } from '@ionic/angular/standalone';\nimport { Observable, of, Subscription } from 'rxjs';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { DisplayContentConfig, DisplayMetadata } from './types';\n\n@Component({\n selector: 'val-display',\n standalone: true,\n imports: [CommonModule, IonText],\n template: `\n <ion-text [color]=\"props.color\">\n <p [class]=\"props.size\">\n {{ displayContent$ | async }}\n </p>\n </ion-text>\n `,\n styleUrls: ['./display.component.scss'],\n})\n/**\n * val-display\n *\n * Displays prominent text or titles with custom color and size.\n * Supports both static and reactive content patterns.\n *\n * @example\n * // Static content\n * <val-display [props]=\"{ content: 'Title', color: 'dark', size: 'large' }\"></val-display>\n *\n * // Reactive content\n * <val-display [props]=\"{ contentConfig: { key: 'welcome.title' }, color: 'primary', size: 'xlarge' }\"></val-display>\n *\n * @input props: DisplayMetadata - Configuration for the display (content/contentConfig, color, size)\n */\nexport class DisplayComponent implements OnInit, OnChanges, OnDestroy {\n displayContent$: Observable<string>;\n private subscriptions = new Subscription();\n\n /**\n * Display configuration object.\n * @type {DisplayMetadata}\n * @property content - Static text to display (takes precedence over contentConfig).\n * @property contentConfig - Reactive content configuration.\n * @property color - The text color (Ionic color string).\n * @property size - The text size ('small' | 'medium' | 'large' | 'xlarge').\n */\n @Input()\n props: DisplayMetadata;\n\n private langService = inject(LangService);\n private cdr = inject(ChangeDetectorRef);\n\n constructor() {}\n\n ngOnInit() {\n this.initializeDisplayContent();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n this.initializeDisplayContent();\n this.cdr.detectChanges();\n }\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n\n private initializeDisplayContent() {\n // Static content takes precedence\n if (this.props.content !== undefined) {\n this.displayContent$ = of(this.props.content);\n return;\n }\n\n // Use reactive content if configured\n if (this.props.contentConfig) {\n this.displayContent$ = this.langService.getContent(\n this.props.contentConfig.className || '_global',\n this.props.contentConfig.key,\n this.props.contentConfig.fallback || this.props.contentConfig.key\n // interpolation: this.props.contentConfig.interpolation,\n );\n return;\n }\n\n // No content configured - use empty string\n this.displayContent$ = of('');\n }\n}\n\n/**\n * Helper function to create reactive display props from content configuration.\n * This provides a convenient way to create val-display props with reactive content.\n *\n * @param contentConfig - Content configuration for reactive content\n * @param styleConfig - Optional style configuration (color and size)\n * @returns DisplayMetadata with content properties set\n *\n * @example\n * ```typescript\n * // In component\n * titleProps: DisplayMetadata = createDisplayProps({\n * key: 'title',\n * className: 'HeaderComponent',\n * fallback: 'Default Title'\n * }, {\n * color: 'primary',\n * size: 'large'\n * });\n * ```\n *\n * @example\n * ```typescript\n * // With interpolation\n * greetingProps: DisplayMetadata = createDisplayProps({\n * key: 'greeting',\n * className: 'UserComponent',\n * fallback: 'Hello!',\n * interpolation: { name: 'John', count: 5 }\n * }, {\n * color: 'secondary',\n * size: 'medium'\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Using default style values\n * simpleProps: DisplayMetadata = createDisplayProps({\n * key: 'welcomeMessage',\n * className: 'HomeComponent'\n * }); // Will use default color: 'dark' and size: 'medium'\n * ```\n */\nexport function createDisplayProps(\n contentConfig: DisplayContentConfig,\n styleConfig: Partial<Pick<DisplayMetadata, 'color' | 'size'>> = {}\n): DisplayMetadata {\n return {\n contentConfig: {\n key: contentConfig.key,\n className: contentConfig.className,\n fallback: contentConfig.fallback,\n interpolation: contentConfig.interpolation,\n },\n color: styleConfig.color || 'dark',\n size: styleConfig.size || 'medium',\n };\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { DividerMetadata } from './types';\n\n/**\n * val-divider\n *\n * A horizontal divider for separating content sections.\n *\n * @example\n * <val-divider [props]=\"{ size: 'medium', color: 'light', fill: 'solid' }\"></val-divider>\n *\n * @input props: DividerMetadata - Configuration for the divider (size, color, fill)\n */\n@Component({\n selector: 'val-divider',\n standalone: true,\n imports: [CommonModule],\n template: ` <div [ngClass]=\"['divider', props.size, props.color, props.fill]\"></div> `,\n styleUrls: ['./divider.component.scss'],\n})\nexport class DividerComponent implements OnInit {\n /**\n * Divider configuration object.\n * @type {DividerMetadata}\n * @property size - The divider size ('small' | 'medium' | 'large').\n * @property color - The divider color.\n * @property fill - The divider fill style ('solid' | 'gradient').\n */\n @Input()\n props: DividerMetadata;\n constructor() {}\n\n ngOnInit() {}\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { DownloadService } from '../../../services/download.service';\nimport { HrefMetadata } from './types';\n\n@Component({\n selector: 'val-href',\n standalone: true,\n imports: [CommonModule],\n template: `\n <a\n [ngClass]=\"[props.color]\"\n [class.hoverable]=\"props.hoverable\"\n [href]=\"props.url\"\n target=\"_blank\"\n (click)=\"onClickHandler($event)\"\n >{{ props.text }}</a\n >\n `,\n styleUrls: ['./href.component.scss'],\n})\n/**\n * val-href\n *\n * A styled anchor/link element, supporting download and click events.\n *\n * @example\n * <val-href [props]=\"{ url: 'https://...', text: 'Open', color: 'primary', download: true }\" (onClick)=\"handler()\"></val-href>\n *\n * @input props: HrefMetadata - Configuration for the link (url, text, color, download, etc.)\n * @output onClick - Emits when the link is clicked\n */\nexport class HrefComponent implements OnInit {\n /**\n * Link configuration object.\n * @type {HrefMetadata}\n * @property url - The URL to open.\n * @property text - The link text.\n * @property color - The link color (Ionic color string).\n * @property download - Whether to trigger a download (optional).\n * @property hoverable - Whether the link is hoverable (optional).\n * @property token - Optional token for event identification.\n */\n @Input() props: HrefMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor(private downloadService: DownloadService) {}\n\n ngOnInit() {}\n\n getFileName() {\n return this.downloadService.getFileNameFromUrl(this.props.url);\n }\n\n onClickHandler(event: MouseEvent) {\n if (this.props.download && this.props.url) {\n event.preventDefault();\n this.downloadService.downloadLinkFromBrowser(this.props.url);\n }\n this.onClick.emit(this.props.token);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { IonIcon } from '@ionic/angular/standalone';\nimport { IconService } from '../../../services/icons.service';\nimport { IconMetadata } from './types';\n\n@Component({\n selector: 'val-icon',\n standalone: true,\n imports: [CommonModule, IonIcon],\n template: ` <ion-icon aria-hidden=\"true\" [ngClass]=\"[props.size]\" [name]=\"props.name\" [color]=\"props.color\" /> `,\n styleUrls: ['./icon.component.scss'],\n})\n/**\n * val-icon\n *\n * Displays an icon from the Ionicons set, with configurable size and color.\n *\n * @example\n * <val-icon [props]=\"{ name: 'star', size: 'large', color: 'warning' }\"></val-icon>\n *\n * @input props: IconMetadata - Configuration for the icon (name, color, size)\n */\nexport class IconComponent implements OnInit {\n /**\n * Icon configuration object.\n * @type {IconMetadata}\n * @property name - The icon name (Ionicons).\n * @property color - The icon color (Ionic color string).\n * @property size - The icon size ('small' | 'medium' | 'large' | 'xlarge').\n */\n @Input()\n props: IconMetadata;\n\n constructor(service: IconService) {}\n\n ngOnInit() {}\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, HostListener, inject, Input, OnInit } from '@angular/core';\nimport {\n IonButton,\n IonButtons,\n IonContent,\n IonHeader,\n IonIcon,\n IonModal,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { ImageMetadata } from './types';\n\n@Component({\n selector: 'val-image',\n standalone: true,\n imports: [CommonModule, IonModal, IonHeader, IonToolbar, IonTitle, IonContent, IonButton, IonIcon, IonButtons],\n template: `\n <figure\n class=\"val-image-container\"\n [class]=\"props.containerClass\"\n [ngClass]=\"{\n 'val-image-container--left': props.alignment === 'left',\n 'val-image-container--center': props.alignment === 'center' || !props.alignment,\n 'val-image-container--right': props.alignment === 'right',\n }\"\n [ngStyle]=\"{\n display: props.flex ? 'flex' : 'inline-block',\n }\"\n >\n <div class=\"val-image-wrapper\">\n @if (props.src.includes('--')) {\n <img\n class=\"val-image\"\n [ngClass]=\"[\n props.mode,\n !props.width ? props.size : '',\n props.previewMode ? 'val-image--preview-enabled' : '',\n ]\"\n [ngStyle]=\"{\n content: 'var(' + props.src + ')',\n }\"\n [class.bordered]=\"props.bordered\"\n [class.shaded]=\"props.shaded\"\n [class.dark]=\"props.dark\"\n [class.limited]=\"props.limited\"\n [class.center]=\"props.alignment === 'center'\"\n [alt]=\"props.alt\"\n [style.width.rem]=\"props.width\"\n [style.max-width.rem]=\"props.width\"\n [style.height.px]=\"props.height\"\n (click)=\"props.previewMode ? openPreview() : null\"\n />\n } @else {\n <img\n class=\"val-image\"\n [ngClass]=\"[\n props.mode,\n !props.width ? props.size : '',\n props.previewMode ? 'val-image--preview-enabled' : '',\n ]\"\n [class.bordered]=\"props.bordered\"\n [class.shaded]=\"props.shaded\"\n [class.dark]=\"props.dark\"\n [class.limited]=\"props.limited\"\n [class.center]=\"props.alignment === 'center'\"\n [src]=\"props.src\"\n [alt]=\"props.alt\"\n [style.width.rem]=\"props.width\"\n [style.max-width.rem]=\"props.width\"\n [style.height.px]=\"props.height\"\n (click)=\"props.previewMode ? openPreview() : null\"\n />\n }\n </div>\n\n @if (props.caption) {\n <figcaption\n class=\"val-image-caption\"\n [ngClass]=\"{\n 'val-image-caption--small': props.captionSize === 'small',\n 'val-image-caption--medium': props.captionSize === 'medium' || !props.captionSize,\n 'val-image-caption--large': props.captionSize === 'large',\n }\"\n >\n {{ props.caption }}\n </figcaption>\n }\n </figure>\n\n <!-- Modal de previsualización con ion-modal -->\n <ion-modal [isOpen]=\"isPreviewOpen\" (didDismiss)=\"closePreview()\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <!-- <ion-title>{{ props.alt || 'Previsualización de imagen' }}</ion-title> -->\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"closePreview()\" fill=\"clear\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n\n <ion-content>\n <!-- Controles de zoom -->\n <div class=\"val-image-preview-controls\">\n <ion-button\n (click)=\"zoomOut(); $event.stopPropagation()\"\n [disabled]=\"zoomLevel <= minZoom\"\n fill=\"clear\"\n size=\"small\"\n >\n <ion-icon name=\"remove-outline\"></ion-icon>\n </ion-button>\n\n <span class=\"val-image-preview-zoom-level\">{{ Math.round(zoomLevel * 100) }}%</span>\n\n <ion-button\n (click)=\"zoomIn(); $event.stopPropagation()\"\n [disabled]=\"zoomLevel >= maxZoom\"\n fill=\"clear\"\n size=\"small\"\n >\n <ion-icon name=\"add-outline\"></ion-icon>\n </ion-button>\n </div>\n\n <!-- Imagen ampliada -->\n <div\n class=\"val-image-preview-viewport\"\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd($event)\"\n (wheel)=\"onWheel($event)\"\n (mousedown)=\"onMouseDown($event)\"\n (mousemove)=\"onMouseMove($event)\"\n (mouseup)=\"onMouseUp($event)\"\n (mouseleave)=\"onMouseUp($event)\"\n >\n <img\n #previewImage\n class=\"val-image-preview-img\"\n [src]=\"props.src.includes('--') ? null : props.src\"\n [ngStyle]=\"{\n content: props.src.includes('--') ? 'var(' + props.src + ')' : null,\n transform: 'scale(' + zoomLevel + ') translate(' + panX + 'px, ' + panY + 'px)',\n cursor: isDragging ? 'grabbing' : zoomLevel > 1 ? 'grab' : 'default',\n }\"\n [alt]=\"props.alt\"\n draggable=\"false\"\n />\n </div>\n </ion-content>\n </ng-template>\n </ion-modal>\n `,\n styleUrls: ['./image.component.scss'],\n})\n/**\n * val-image\n *\n * Displays an image with various display options (bordered, shaded, dark, etc).\n * Now includes a container wrapper for better flexbox support and alignment options.\n *\n * NEW: Optional preview mode with full-screen zoom capabilities:\n * - Click to open full-screen preview (when previewMode is enabled)\n * - Pinch-to-zoom on mobile devices\n * - Mouse wheel zoom on desktop\n * - Pan/drag to navigate zoomed images\n * - Zoom controls with buttons\n * - Keyboard shortcuts (Esc to close, +/- to zoom, 0 to reset)\n * - Touch-friendly interface with gesture support\n *\n * @example Basic usage:\n * <val-image [props]=\"{\n * src: 'url',\n * alt: 'desc',\n * width: 100,\n * height: 100,\n * bordered: true,\n * alignment: 'center',\n * caption: 'Image description'\n * }\"></val-image>\n *\n * @example With preview mode:\n * <val-image [props]=\"{\n * src: 'url',\n * alt: 'desc',\n * previewMode: true,\n * bordered: true,\n * alignment: 'center'\n * }\"></val-image>\n *\n * @input props: ImageMetadata - Configuration for the image (src, alt, size, mode, alignment, caption, previewMode, etc.)\n */\nexport class ImageComponent implements OnInit {\n @Input()\n props!: ImageMetadata;\n\n available: boolean = true;\n\n // Preview mode properties\n isPreviewOpen: boolean = false;\n zoomLevel: number = 1;\n minZoom: number = 0.5;\n maxZoom: number = 5;\n panX: number = 0;\n panY: number = 0;\n\n // Touch and mouse interaction properties\n isDragging: boolean = false;\n lastPanX: number = 0;\n lastPanY: number = 0;\n startX: number = 0;\n startY: number = 0;\n\n // Touch gesture properties\n initialDistance: number = 0;\n initialZoom: number = 1;\n touches: Touch[] = [];\n\n // Lang service\n langService = inject(LangService);\n\n // Math for template\n Math = Math;\n\n constructor() {}\n\n ngOnInit() {\n // Set default values\n if (!this.props.alignment) {\n this.props.alignment = 'center';\n }\n if (!this.props.captionSize) {\n this.props.captionSize = 'medium';\n }\n if (!this.props.mode) {\n this.props.mode = 'box';\n }\n }\n\n changeToVisible() {\n setInterval(() => {\n this.available = true;\n }, 100);\n }\n\n // Preview mode methods\n openPreview() {\n if (!this.props.previewMode) return;\n this.isPreviewOpen = true;\n this.resetZoom();\n }\n\n closePreview() {\n this.isPreviewOpen = false;\n }\n\n // Zoom methods\n zoomIn() {\n if (this.zoomLevel < this.maxZoom) {\n this.zoomLevel = Math.min(this.zoomLevel * 1.2, this.maxZoom);\n }\n }\n\n zoomOut() {\n if (this.zoomLevel > this.minZoom) {\n this.zoomLevel = Math.max(this.zoomLevel / 1.2, this.minZoom);\n // Reset pan if zoomed out to 1x or less\n if (this.zoomLevel <= 1) {\n this.panX = 0;\n this.panY = 0;\n }\n }\n }\n\n resetZoom() {\n this.zoomLevel = 1;\n this.panX = 0;\n this.panY = 0;\n }\n\n // Mouse events\n onMouseDown(event: MouseEvent) {\n if (this.zoomLevel <= 1) return;\n\n this.isDragging = true;\n this.startX = event.clientX - this.panX;\n this.startY = event.clientY - this.panY;\n event.preventDefault();\n }\n\n onMouseMove(event: MouseEvent) {\n if (!this.isDragging || this.zoomLevel <= 1) return;\n\n this.panX = event.clientX - this.startX;\n this.panY = event.clientY - this.startY;\n event.preventDefault();\n }\n\n onMouseUp(event: MouseEvent) {\n this.isDragging = false;\n }\n\n // Touch events for mobile\n onTouchStart(event: TouchEvent) {\n event.preventDefault();\n this.touches = Array.from(event.touches);\n\n if (this.touches.length === 1) {\n // Single touch - start dragging\n if (this.zoomLevel > 1) {\n this.isDragging = true;\n this.startX = this.touches[0].clientX - this.panX;\n this.startY = this.touches[0].clientY - this.panY;\n }\n } else if (this.touches.length === 2) {\n // Two touches - start pinch zoom\n this.isDragging = false;\n this.initialDistance = this.getDistance(this.touches[0], this.touches[1]);\n this.initialZoom = this.zoomLevel;\n }\n }\n\n onTouchMove(event: TouchEvent) {\n event.preventDefault();\n this.touches = Array.from(event.touches);\n\n if (this.touches.length === 1 && this.isDragging && this.zoomLevel > 1) {\n // Single touch - drag\n this.panX = this.touches[0].clientX - this.startX;\n this.panY = this.touches[0].clientY - this.startY;\n } else if (this.touches.length === 2) {\n // Two touches - pinch zoom\n const currentDistance = this.getDistance(this.touches[0], this.touches[1]);\n const scale = currentDistance / this.initialDistance;\n this.zoomLevel = Math.min(Math.max(this.initialZoom * scale, this.minZoom), this.maxZoom);\n\n // Reset pan if zoomed out to 1x or less\n if (this.zoomLevel <= 1) {\n this.panX = 0;\n this.panY = 0;\n }\n }\n }\n\n onTouchEnd(event: TouchEvent) {\n this.isDragging = false;\n this.touches = Array.from(event.touches);\n }\n\n // Mouse wheel zoom\n onWheel(event: WheelEvent) {\n event.preventDefault();\n\n const delta = event.deltaY > 0 ? -1 : 1;\n const zoomFactor = 1 + delta * 0.1;\n\n this.zoomLevel = Math.min(Math.max(this.zoomLevel * zoomFactor, this.minZoom), this.maxZoom);\n\n // Reset pan if zoomed out to 1x or less\n if (this.zoomLevel <= 1) {\n this.panX = 0;\n this.panY = 0;\n }\n }\n\n // Helper methods\n private getDistance(touch1: Touch, touch2: Touch): number {\n const dx = touch1.clientX - touch2.clientX;\n const dy = touch1.clientY - touch2.clientY;\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n // Keyboard shortcuts\n @HostListener('document:keydown', ['$event'])\n onKeyDown(event: KeyboardEvent) {\n if (!this.isPreviewOpen) return;\n\n switch (event.key) {\n case 'Escape':\n this.closePreview();\n break;\n case '+':\n case '=':\n event.preventDefault();\n this.zoomIn();\n break;\n case '-':\n event.preventDefault();\n this.zoomOut();\n break;\n case '0':\n event.preventDefault();\n this.resetZoom();\n break;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { IonProgressBar } from '@ionic/angular/standalone';\nimport { ProgressBarMetadata } from './types';\n\n@Component({\n selector: 'val-progress-bar',\n standalone: true,\n imports: [CommonModule, IonProgressBar],\n template: `\n <ion-progress-bar\n [ngClass]=\"[props.size]\"\n [class.rounded]=\"props.rounded\"\n [value]=\"props.progress\"\n [color]=\"props.color\"\n [buffer]=\"props.buffer\"\n [type]=\"props.type\"\n ></ion-progress-bar>\n `,\n styleUrls: ['./progress-bar.component.scss'],\n})\n/**\n * val-progress-bar\n *\n * A progress bar for indicating completion or loading state.\n *\n * @example\n * <val-progress-bar [props]=\"{ progress: 0.5, color: 'success', size: 'small' }\"></val-progress-bar>\n *\n * @input props: ProgressBarMetadata - Configuration for the progress bar (progress, color, size, etc.)\n */\nexport class ProgressBarComponent implements OnInit {\n /**\n * Progress bar configuration object.\n * @type {ProgressBarMetadata}\n * @property progress - The progress value (0 to 1).\n * @property size - The progress bar size ('small' | 'medium' | 'large' | 'xlarge').\n * @property color - The progress bar color (Ionic color string).\n * @property buffer - The buffer value for the bar.\n * @property type - The type of progress bar ('determinate' | 'indeterminate').\n * @property rounded - Whether the bar has rounded corners.\n */\n @Input()\n props: ProgressBarMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","import { Injectable } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\nexport interface LinkProcessorConfig {\n /** Whether to open external links in new tab (default: true) */\n openExternalInNewTab?: boolean;\n /** Whether to open internal links in new tab (default: false) */\n openInternalInNewTab?: boolean;\n /** Custom CSS classes for links */\n linkClass?: string;\n /** Custom CSS classes for external links */\n externalLinkClass?: string;\n /** Custom CSS classes for internal links */\n internalLinkClass?: string;\n /** Whether to process Markdown-style links [text](url) (default: true) */\n processMarkdownLinks?: boolean;\n}\n\n/**\n * LinkProcessorService - Service for processing text content to convert URLs and internal routes into clickable links.\n *\n * This service automatically detects external URLs (http/https), internal routes (starting with /),\n * and Markdown-style links [text](url) and converts them into HTML anchor elements with appropriate attributes.\n *\n * @example Basic usage:\n * ```typescript\n * constructor(private linkProcessor: LinkProcessorService) {}\n *\n * processText() {\n * const text = 'Visit https://example.com, go to /profile, or [check docs](https://docs.example.com)';\n * const processed = this.linkProcessor.processLinks(text);\n * // Returns SafeHtml with clickable links\n * }\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class LinkProcessorService {\n // Regex para detectar URLs completas (http/https) - captura toda la URL y luego limpiamos puntuación\n private readonly urlRegex = /(https?:\\/\\/[^\\s]+)/g;\n\n // Regex para detectar rutas internas - captura toda la ruta y luego limpiamos puntuación\n private readonly internalRouteRegex = /(\\s|^)(\\/[^\\s]*)/g;\n\n // Regex para detectar enlaces estilo Markdown [texto](url)\n private readonly markdownLinkRegex = /\\[([^\\]]+)\\]\\(([^)]+)\\)/g;\n\n constructor(private sanitizer: DomSanitizer) {}\n\n /**\n * Limpia la puntuación del final de una URL.\n * Mantiene caracteres válidos de URL pero remueve signos de puntuación comunes al final.\n * Preserva parámetros de consulta, fragmentos y caracteres válidos en URLs.\n */\n private cleanUrlPunctuation(url: string): string {\n // Caracteres que consideramos puntuación al final de oración, pero NO parte de URLs\n // No incluimos & o = que son parte de query params, ni # que es parte de fragmentos\n const trailingPunctuation = /[.,;!?)]+$/;\n\n // Casos especiales: si la URL termina con paréntesis pero no tiene paréntesis de apertura\n // probablemente el paréntesis no es parte de la URL\n const hasOpeningParen = url.includes('(');\n const endsWithClosingParen = url.endsWith(')');\n\n if (endsWithClosingParen && !hasOpeningParen) {\n // Remover el paréntesis de cierre si no hay uno de apertura\n url = url.replace(/\\)$/, '');\n }\n\n return url.replace(trailingPunctuation, '');\n }\n\n /**\n * Procesa texto para convertir enlaces en elementos <a> clickeables.\n * Detecta automáticamente URLs externas, rutas internas y enlaces estilo Markdown.\n *\n * @param text - Texto a procesar\n * @param config - Configuración del procesamiento\n * @returns SafeHtml con enlaces procesados o string original\n *\n * @example\n * ```typescript\n * const result = this.linkProcessor.processLinks(\n * 'Visit https://example.com, go to /profile, or [check docs](https://docs.example.com)',\n * {\n * openExternalInNewTab: true,\n * openInternalInNewTab: false,\n * processMarkdownLinks: true,\n * linkClass: 'custom-link'\n * }\n * );\n * ```\n */\n processLinks(text: string, config: LinkProcessorConfig = {}): SafeHtml | string {\n if (!text) return '';\n\n const {\n openExternalInNewTab = true,\n openInternalInNewTab = false,\n linkClass = 'processed-link',\n externalLinkClass = 'external-link',\n internalLinkClass = 'internal-link',\n processMarkdownLinks = true,\n } = config;\n\n let hasLinks = false;\n let processedText = text;\n\n // 1. Procesar enlaces estilo Markdown [texto](url) primero\n if (processMarkdownLinks) {\n const markdownMatches = Array.from(processedText.matchAll(this.markdownLinkRegex));\n\n // Procesar de atrás hacia adelante para mantener las posiciones\n for (let i = markdownMatches.length - 1; i >= 0; i--) {\n const match = markdownMatches[i];\n const [fullMatch, linkText, url] = match;\n const startIndex = match.index!;\n const endIndex = startIndex + fullMatch.length;\n\n hasLinks = true;\n const isExternal = /^https?:\\/\\//.test(url);\n const target = (isExternal ? openExternalInNewTab : openInternalInNewTab)\n ? isExternal\n ? ' target=\"_blank\" rel=\"noopener noreferrer\"'\n : ' target=\"_blank\"'\n : '';\n const typeClass = isExternal ? externalLinkClass : internalLinkClass;\n const classes = `${linkClass} ${typeClass}`.trim();\n const linkHtml = `<a href=\"${url}\"${target} class=\"${classes}\">${linkText}</a>`;\n\n processedText =\n processedText.substring(0, startIndex) + linkHtml + processedText.substring(endIndex);\n }\n }\n\n // 2. Procesar URLs externas directas\n const urlMatches = Array.from(processedText.matchAll(this.urlRegex));\n\n // Procesar de atrás hacia adelante para mantener las posiciones\n for (let i = urlMatches.length - 1; i >= 0; i--) {\n const match = urlMatches[i];\n const [fullMatch, url] = match;\n const startIndex = match.index!;\n const endIndex = startIndex + fullMatch.length;\n\n // Verificar que no esté ya dentro de un enlace HTML existente\n const textBefore = processedText.substring(0, startIndex);\n const lastOpenTag = textBefore.lastIndexOf('<a ');\n const lastCloseTag = textBefore.lastIndexOf('</a>');\n\n // Si hay un tag <a abierto sin cerrar, no procesamos\n if (lastOpenTag > lastCloseTag) {\n continue;\n }\n\n // Limpiar puntuación del final de la URL\n const cleanUrl = this.cleanUrlPunctuation(url);\n const punctuationRemoved = url !== cleanUrl;\n const punctuation = punctuationRemoved ? url.substring(cleanUrl.length) : '';\n\n hasLinks = true;\n const target = openExternalInNewTab ? ' target=\"_blank\" rel=\"noopener noreferrer\"' : '';\n const classes = `${linkClass} ${externalLinkClass}`.trim();\n const linkHtml = `<a href=\"${cleanUrl}\"${target} class=\"${classes}\">${cleanUrl}</a>`;\n\n // Reemplazar el URL original con el enlace + puntuación si existía\n const replacement = punctuationRemoved ? linkHtml + punctuation : linkHtml;\n processedText =\n processedText.substring(0, startIndex) + replacement + processedText.substring(endIndex);\n }\n\n // 3. Procesar rutas internas\n const internalMatches = Array.from(processedText.matchAll(this.internalRouteRegex));\n\n // Procesar de atrás hacia adelante para mantener las posiciones\n for (let i = internalMatches.length - 1; i >= 0; i--) {\n const match = internalMatches[i];\n const [fullMatch, prefix, route] = match;\n const startIndex = match.index!;\n const endIndex = startIndex + fullMatch.length;\n\n // Verificar que no esté ya dentro de un enlace HTML existente\n const textBefore = processedText.substring(0, startIndex);\n const lastOpenTag = textBefore.lastIndexOf('<a ');\n const lastCloseTag = textBefore.lastIndexOf('</a>');\n\n // Si hay un tag <a abierto sin cerrar, no procesamos\n if (lastOpenTag > lastCloseTag) {\n continue;\n }\n\n hasLinks = true;\n const target = openInternalInNewTab ? ' target=\"_blank\"' : '';\n const classes = `${linkClass} ${internalLinkClass}`.trim();\n const linkHtml = `<a href=\"${route}\"${target} class=\"${classes}\">${route}</a>`;\n\n const replacement = `${prefix}${linkHtml}`;\n processedText =\n processedText.substring(0, startIndex) + replacement + processedText.substring(endIndex);\n }\n\n // Si hay enlaces, sanitizar el HTML\n if (hasLinks) {\n return this.sanitizer.bypassSecurityTrustHtml(processedText);\n }\n\n return text;\n }\n\n /**\n * Detecta si un texto contiene enlaces (URLs, rutas internas o enlaces Markdown).\n *\n * @param text - Texto a analizar\n * @returns true si contiene enlaces\n *\n * @example\n * ```typescript\n * const hasLinks = this.linkProcessor.hasLinks('Visit https://example.com or [docs](https://docs.com)');\n * // Returns: true\n * ```\n */\n hasLinks(text: string): boolean {\n if (!text) return false;\n\n // Reset regex indices\n this.urlRegex.lastIndex = 0;\n this.internalRouteRegex.lastIndex = 0;\n this.markdownLinkRegex.lastIndex = 0;\n\n return (\n this.urlRegex.test(text) ||\n this.internalRouteRegex.test(text) ||\n this.markdownLinkRegex.test(text)\n );\n }\n\n /**\n * Extrae todos los enlaces de un texto.\n *\n * @param text - Texto a analizar\n * @returns Array de enlaces encontrados con su tipo y texto (si es Markdown)\n *\n * @example\n * ```typescript\n * const links = this.linkProcessor.extractLinks('Visit https://example.com, /profile, or [docs](https://docs.com)');\n * // Returns: [\n * // { url: 'https://example.com', type: 'external', text: 'https://example.com' },\n * // { url: '/profile', type: 'internal', text: '/profile' },\n * // { url: 'https://docs.com', type: 'external', text: 'docs' }\n * // ]\n * ```\n */\n extractLinks(text: string): Array<{ url: string; type: 'external' | 'internal'; text: string }> {\n if (!text) return [];\n\n const links: Array<{ url: string; type: 'external' | 'internal'; text: string }> = [];\n\n // Reset regex indices\n this.urlRegex.lastIndex = 0;\n this.internalRouteRegex.lastIndex = 0;\n this.markdownLinkRegex.lastIndex = 0;\n\n // Extraer enlaces Markdown primero\n let match;\n while ((match = this.markdownLinkRegex.exec(text)) !== null) {\n const url = match[2];\n const linkText = match[1];\n const type = /^https?:\\/\\//.test(url) ? 'external' : 'internal';\n links.push({ url, type, text: linkText });\n }\n\n // Extraer URLs externas directas\n while ((match = this.urlRegex.exec(text)) !== null) {\n const url = match[1];\n // Verificar que no esté ya capturado como Markdown link\n if (!links.some(link => link.url === url)) {\n links.push({ url, type: 'external', text: url });\n }\n }\n\n // Extraer rutas internas directas\n while ((match = this.internalRouteRegex.exec(text)) !== null) {\n const url = match[2];\n // Verificar que no esté ya capturado como Markdown link\n if (!links.some(link => link.url === url)) {\n links.push({ url, type: 'internal', text: url });\n }\n }\n\n return links;\n }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { LinkProcessorConfig, LinkProcessorService } from '../../services/link-processor.service';\n\n/**\n * ProcessLinksPipe - Pipe para procesar texto y convertir URLs en enlaces clickeables.\n *\n * Este pipe standalone detecta automáticamente URLs externas (http/https) y rutas internas\n * (que empiezan con /) y las convierte en elementos HTML anchor con los atributos apropiados.\n *\n * @example Uso básico:\n * ```html\n * <div [innerHTML]=\"'Visit https://example.com or go to /profile' | processLinks\"></div>\n * ```\n *\n * @example Con configuración personalizada:\n * ```html\n * <div [innerHTML]=\"text | processLinks:linkConfig\"></div>\n * ```\n *\n * @example En TypeScript:\n * ```typescript\n * export class MyComponent {\n * linkConfig: LinkProcessorConfig = {\n * openExternalInNewTab: true,\n * openInternalInNewTab: false,\n * linkClass: 'my-link',\n * externalLinkClass: 'external',\n * internalLinkClass: 'internal'\n * };\n * }\n * ```\n */\n@Pipe({\n name: 'processLinks',\n standalone: true,\n})\nexport class ProcessLinksPipe implements PipeTransform {\n private linkProcessor = inject(LinkProcessorService);\n\n /**\n * Transforma texto procesando URLs y rutas internas para convertirlas en enlaces.\n *\n * @param value - El texto a procesar\n * @param config - Configuración opcional para el procesamiento de enlaces\n * @returns SafeHtml con enlaces procesados o string original si no hay enlaces\n *\n * @example\n * ```html\n * <!-- Uso básico -->\n * <p [innerHTML]=\"'Check out https://angular.io' | processLinks\"></p>\n *\n * <!-- Con configuración -->\n * <p [innerHTML]=\"message | processLinks:{ openExternalInNewTab: false }\"></p>\n * ```\n */\n transform(value: string, config?: LinkProcessorConfig): SafeHtml | string {\n if (!value) {\n return '';\n }\n\n return this.linkProcessor.processLinks(value, config);\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { IonText } from '@ionic/angular/standalone';\nimport { Observable, of, Subscription } from 'rxjs';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { LinkProcessorService } from '../../../services/link-processor.service';\nimport { ProcessLinksPipe } from '../../../shared/pipes/process-links.pipe';\nimport { interpolateStaticContent, shouldUseReactiveContent } from '../../../shared/utils/simple-content';\nimport { TextContentConfig, TextMetadata } from './types';\n\n@Component({\n selector: 'val-text',\n standalone: true,\n imports: [IonText, AsyncPipe, ProcessLinksPipe],\n template: `\n <ion-text [color]=\"props.color\">\n @if (props.processLinks) {\n <p\n [class]=\"props.size\"\n [class.bold]=\"props.bold\"\n [innerHTML]=\"displayContent$ | async | processLinks: props.linkConfig\"\n ></p>\n } @else if (\n (props.allowPartialBold && (displayContent$ | async)?.includes('<b>')) ||\n (displayContent$ | async)?.includes('<strong>')\n ) {\n <p [class]=\"props.size\" [class.bold]=\"props.bold\" [innerHTML]=\"processPartialBold(displayContent$ | async)\"></p>\n } @else {\n <p [class]=\"props.size\" [class.bold]=\"props.bold\">{{ displayContent$ | async }}</p>\n }\n </ion-text>\n `,\n styleUrls: ['./text.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n/**\n * val-text\n *\n * Enhanced text component that supports both static content and reactive content from the language service.\n * The component automatically updates when the language changes if using reactive content.\n *\n * @example Static content:\n * ```html\n * <val-text [props]=\"{\n * content: 'Static text',\n * color: 'primary',\n * size: 'medium',\n * bold: false\n * }\"></val-text>\n * ```\n *\n * @example Reactive content:\n * ```html\n * <val-text [props]=\"{\n * contentKey: 'welcomeMessage',\n * contentClass: 'HomeComponent',\n * contentFallback: 'Welcome!',\n * color: 'primary',\n * size: 'large',\n * bold: true\n * }\"></val-text>\n * ```\n *\n * @example Reactive content with interpolation:\n * ```html\n * <val-text [props]=\"{\n * contentKey: 'greeting',\n * contentClass: 'UserComponent',\n * contentInterpolation: { name: 'John', count: 5 },\n * color: 'secondary',\n * size: 'medium',\n * bold: false\n * }\"></val-text>\n * ```\n *\n * @example With automatic link processing:\n * ```html\n * <val-text [props]=\"{\n * content: 'Visit https://example.com or go to /profile for more info',\n * processLinks: true,\n * linkConfig: {\n * openExternalInNewTab: true,\n * openInternalInNewTab: false,\n * linkClass: 'custom-link',\n * externalLinkClass: 'external',\n * internalLinkClass: 'internal'\n * },\n * color: 'primary',\n * size: 'medium'\n * }\"></val-text>\n * ```\n *\n * @example With partial bold support:\n * ```html\n * <val-text [props]=\"{\n * content: 'Hola <b>Victor</b>, cómo estás? También puedes usar <strong>strong</strong>',\n * allowPartialBold: true,\n * color: 'dark',\n * size: 'medium',\n * bold: false\n * }\"></val-text>\n * ```\n *\n * @example Reactive content with partial bold:\n * ```html\n * <val-text [props]=\"{\n * contentKey: 'welcomeWithName',\n * contentClass: 'UserComponent',\n * contentInterpolation: { name: '<b>Juan</b>' },\n * allowPartialBold: true,\n * color: 'primary',\n * size: 'large',\n * bold: false\n * }\"></val-text>\n * ```\n *\n * @example Using ContentService helper:\n * ```typescript\n * // In component\n * content = inject(ContentService);\n * componentContent = this.content.forComponent('MyComponent');\n *\n * textProps = {\n * content: this.componentContent.getText('title'), // sync\n * color: 'primary',\n * size: 'large',\n * bold: true\n * };\n * // Or with reactive binding:\n * title$ = this.componentContent.get('title');\n * ```\n *\n * @input props: TextMetadata - Configuration for the text (content, styling, and reactive content options)\n */\nexport class TextComponent implements OnInit, OnDestroy {\n /**\n * Text configuration object.\n * @type {TextMetadata}\n *\n * For static content:\n * @property content - The text to display (takes precedence over reactive content)\n *\n * For reactive content:\n * @property contentKey - The content key to retrieve from language service\n * @property contentClass - The component class name for content lookup\n * @property contentFallback - Optional fallback text if content is not found\n * @property contentInterpolation - Optional values to interpolate into content\n *\n * For styling:\n * @property color - The text color (Ionic color string)\n * @property size - The text size ('small' | 'medium' | 'large' | 'xlarge')\n * @property bold - Whether the text is bold\n * @property processLinks - Whether to automatically process and convert links in text (default: false)\n * @property linkConfig - Configuration for link processing (colors, target behavior, etc.)\n * @property allowPartialBold - Whether to allow partial bold using <b> or <strong> tags (default: false)\n */\n @Input()\n props: TextMetadata;\n\n /**\n * Observable that provides the content to display.\n * This will be either static content or reactive content from the language service.\n */\n displayContent$: Observable<string>;\n\n private subscription = new Subscription();\n\n constructor(\n private langService: LangService,\n private linkProcessor: LinkProcessorService\n ) {}\n\n ngOnInit() {\n this.setupDisplayContent();\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n /**\n * Set up the content observable based on the props configuration.\n * Priority: static content > reactive content with interpolation > reactive content\n */\n private setupDisplayContent(): void {\n if (this.props.content) {\n // Static content takes precedence\n if (this.props.contentInterpolation) {\n // Static content with interpolation\n const interpolatedContent = interpolateStaticContent(this.props.content, this.props.contentInterpolation);\n this.displayContent$ = of(interpolatedContent);\n } else {\n // Simple static content\n this.displayContent$ = of(this.props.content);\n }\n } else if (shouldUseReactiveContent(this.props)) {\n // Reactive content from language service\n if (this.props.contentInterpolation) {\n // With interpolation\n this.displayContent$ = this.langService.getContentWithInterpolation(\n this.props.contentClass!,\n this.props.contentKey!,\n this.props.contentInterpolation,\n this.props.contentFallback\n );\n } else {\n // Simple reactive content\n this.displayContent$ = this.langService.getContent(\n this.props.contentClass!,\n this.props.contentKey!,\n this.props.contentFallback\n );\n }\n } else {\n // Fallback to empty string if no valid content configuration\n console.warn(\n 'val-text: No valid content configuration provided. Use either \"content\" for static text or \"contentKey\" + \"contentClass\" for reactive content.'\n );\n this.displayContent$ = of(this.props.contentFallback || '');\n }\n }\n\n /**\n * Process partial bold tags in the content.\n * Converts <b> and <strong> tags to properly styled bold spans.\n *\n * @param content - The content string to process\n * @returns Processed content with bold styling\n */\n processPartialBold(content: string | null): string {\n if (!content) return '';\n\n // Process <b> tags\n let processedContent = content.replace(/<b>(.*?)<\\/b>/gi, '<span class=\"partial-bold\">$1</span>');\n\n // Process <strong> tags\n processedContent = processedContent.replace(/<strong>(.*?)<\\/strong>/gi, '<span class=\"partial-bold\">$1</span>');\n\n return processedContent;\n }\n}\n\n/**\n * Helper function to create reactive text props from content configuration.\n * This provides a convenient way to create val-text props with reactive content.\n *\n * @param contentConfig - Content configuration\n * @param styleConfig - Optional style configuration\n * @returns Partial TextMetadata with content properties set\n *\n * @example\n * ```typescript\n * // In component\n * titleProps: TextMetadata = {\n * ...createTextProps({\n * contentKey: 'title',\n * contentClass: 'HeaderComponent'\n * }, {\n * color: 'primary',\n * size: 'large',\n * bold: true\n * })\n * };\n * ```\n *\n * @example With partial bold support:\n * ```typescript\n * // In component\n * greetingProps: TextMetadata = {\n * ...createTextProps({\n * contentKey: 'greeting',\n * contentClass: 'UserComponent',\n * contentInterpolation: { name: '<b>Juan</b>' }\n * }, {\n * color: 'primary',\n * size: 'medium',\n * bold: false,\n * allowPartialBold: true\n * })\n * };\n * ```\n */\nexport function createTextProps(\n contentConfig: TextContentConfig,\n styleConfig: Partial<Pick<TextMetadata, 'color' | 'size' | 'bold' | 'allowPartialBold'>> = {}\n): Partial<TextMetadata> {\n return {\n contentKey: contentConfig.contentKey,\n contentClass: contentConfig.contentClass,\n contentFallback: contentConfig.contentFallback,\n contentInterpolation: contentConfig.contentInterpolation,\n color: styleConfig.color || 'dark',\n size: styleConfig.size || 'medium',\n bold: styleConfig.bold || false,\n allowPartialBold: styleConfig.allowPartialBold || false,\n };\n}\n","import { AsyncPipe, CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n inject,\n} from '@angular/core';\nimport { IonText } from '@ionic/angular/standalone';\nimport { Observable, of } from 'rxjs';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { extractContentConfig, shouldUseReactiveContent } from '../../../shared/utils/simple-content';\nimport { TitleMetadata } from './types';\n\n@Component({\n selector: 'val-title',\n standalone: true,\n imports: [CommonModule, IonText, AsyncPipe],\n template: `\n <ion-text [color]=\"props.color\">\n @if (!props.bold) {\n <p [ngClass]=\"[props.size]\" [class.thin]=\"props.thin\">\n {{ displayContent$ | async }}\n </p>\n } @else {\n <b>\n <p [class]=\"props.size\">\n {{ displayContent$ | async }}\n </p>\n </b>\n }\n </ion-text>\n `,\n styleUrls: ['./title.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n/**\n * val-title\n *\n * A styled title or heading, with options for size, color, and boldness.\n * Supports both static content and reactive content from the language service.\n *\n * @example Static content:\n * ```html\n * <val-title [props]=\"{ content: 'My Title', size: 'large', color: 'primary', bold: true }\"></val-title>\n * ```\n *\n * @example Reactive content:\n * ```html\n * <val-title [props]=\"{\n * contentConfig: { key: 'pageTitle', fallback: 'Default Title' },\n * size: 'large',\n * color: 'primary',\n * bold: true\n * }\"></val-title>\n * ```\n *\n * @example Reactive content with interpolation:\n * ```html\n * <val-title [props]=\"{\n * contentConfig: {\n * key: 'welcomeTitle',\n * interpolation: { name: 'John' },\n * fallback: 'Welcome!'\n * },\n * size: 'large',\n * color: 'primary',\n * bold: true\n * }\"></val-title>\n * ```\n *\n * @input props: TitleMetadata - Configuration for the title (content, color, size, bold, thin)\n */\nexport class TitleComponent implements OnInit, OnChanges {\n /**\n * Title configuration object.\n * @type {TitleMetadata}\n * @property content - Static title text (takes precedence over reactive content).\n * @property contentConfig - Reactive content configuration.\n * @property color - The title color (Ionic color string).\n * @property size - The title size ('small' | 'medium' | 'large' | 'xlarge').\n * @property bold - Whether the title is bold.\n * @property thin - Whether the title is thin (optional).\n */\n @Input()\n props: TitleMetadata;\n\n private langService = inject(LangService);\n private cdr = inject(ChangeDetectorRef);\n\n displayContent$: Observable<string>;\n\n constructor() {}\n\n ngOnInit() {\n this.updateContent();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n this.updateContent();\n this.cdr.detectChanges();\n }\n }\n\n private updateContent() {\n // Always convert to Observable for consistent template handling\n if (shouldUseReactiveContent(this.props)) {\n // Use reactive content with LangService\n const config = extractContentConfig(this.props);\n this.displayContent$ = this.langService.getContent(config.className, config.key, config.fallback);\n } else {\n // Convert static content to Observable\n const staticContent = this.props.content || '';\n this.displayContent$ = of(staticContent);\n }\n }\n}\n","import { Color } from '@ionic/core';\nimport { ReactiveTextMetadata } from '../../../shared/utils/simple-content';\n\n/**\n * Props for val-title component.\n * Supports both static content and reactive content from the language service.\n *\n * @property content - Static title text to display (takes precedence over reactive content).\n * @property contentKey - Content key for reactive content lookup.\n * @property contentClass - Component class name for content lookup.\n * @property contentFallback - Fallback text if content is not found.\n * @property color - The title color (Ionic color string).\n * @property size - The title size ('small' | 'medium' | 'large' | 'xlarge').\n * @property bold - Whether the title is bold.\n * @property thin - Whether the title is thin (optional).\n */\nexport interface TitleMetadata extends ReactiveTextMetadata {\n size: 'small' | 'medium' | 'large' | 'xlarge';\n color: Color;\n bold: boolean;\n thin?: boolean;\n}\n\n/**\n * Factory function to create title props with reactive content support.\n *\n * @param styleConfig - Title styling configuration\n * @param contentConfig - Content configuration (static or reactive)\n * @returns Complete TitleMetadata object\n *\n * @example Static content:\n * ```typescript\n * const props = createTitleProps(\n * { size: 'large', color: 'primary', bold: true },\n * { content: 'Static Title' }\n * );\n * ```\n *\n * @example Reactive content:\n * ```typescript\n * const props = createTitleProps(\n * { size: 'large', color: 'primary', bold: true },\n * {\n * contentKey: 'pageTitle',\n * contentClass: 'MyComponent',\n * contentFallback: 'Default Title'\n * }\n * );\n * ```\n */\nexport function createTitleProps(\n styleConfig: Pick<TitleMetadata, 'size' | 'color' | 'bold' | 'thin'>,\n contentConfig: Pick<TitleMetadata, 'content' | 'contentKey' | 'contentClass' | 'contentFallback'>\n): TitleMetadata {\n return {\n ...styleConfig,\n ...contentConfig,\n };\n}\n","/**\n * Skeleton type presets.\n */\nexport type SkeletonType = 'text' | 'avatar' | 'thumbnail' | 'card' | 'list-item' | 'paragraph' | 'custom';\n\n/**\n * Metadata for the skeleton component.\n */\nexport interface SkeletonMetadata {\n /** Skeleton type preset */\n type?: SkeletonType;\n /** Number of lines (for text/paragraph type) */\n lines?: number;\n /** Enable animation */\n animated?: boolean;\n /** Custom width */\n width?: string;\n /** Custom height */\n height?: string;\n /** Border radius */\n borderRadius?: string;\n /** Show as circle (for avatar) */\n circle?: boolean;\n /** Unique token identifier */\n token?: string;\n}\n\n/**\n * Preset configurations for skeleton types.\n */\nexport const SKELETON_PRESETS: Record<SkeletonType, Partial<SkeletonMetadata>> = {\n text: { width: '100%', height: '16px', borderRadius: '4px' },\n avatar: { width: '48px', height: '48px', circle: true },\n thumbnail: { width: '80px', height: '80px', borderRadius: '8px' },\n card: { width: '100%', height: '120px', borderRadius: '8px' },\n 'list-item': { width: '100%', height: '56px', borderRadius: '4px' },\n paragraph: { width: '100%', height: '16px', borderRadius: '4px', lines: 3 },\n custom: {},\n};\n","import { Component, Input } from '@angular/core';\nimport { IonSkeletonText } from '@ionic/angular/standalone';\nimport { CommonModule } from '@angular/common';\nimport { SkeletonMetadata, SKELETON_PRESETS } from './types';\n\n@Component({\n selector: 'val-skeleton',\n standalone: true,\n imports: [CommonModule, IonSkeletonText],\n template: `\n @switch (props.type) {\n @case ('paragraph') {\n <div class=\"skeleton-paragraph\">\n @for (line of getLines(); track $index; let isLast = $last) {\n <ion-skeleton-text\n [animated]=\"props.animated !== false\"\n [style.width]=\"isLast ? '60%' : '100%'\"\n [style.height]=\"getHeight()\"\n [style.border-radius]=\"getBorderRadius()\"\n ></ion-skeleton-text>\n }\n </div>\n }\n @case ('list-item') {\n <div class=\"skeleton-list-item\">\n <ion-skeleton-text\n [animated]=\"props.animated !== false\"\n class=\"skeleton-avatar\"\n ></ion-skeleton-text>\n <div class=\"skeleton-content\">\n <ion-skeleton-text\n [animated]=\"props.animated !== false\"\n style=\"width: 70%; height: 14px;\"\n ></ion-skeleton-text>\n <ion-skeleton-text\n [animated]=\"props.animated !== false\"\n style=\"width: 50%; height: 12px;\"\n ></ion-skeleton-text>\n </div>\n </div>\n }\n @case ('card') {\n <div class=\"skeleton-card\">\n <ion-skeleton-text\n [animated]=\"props.animated !== false\"\n class=\"skeleton-card-image\"\n ></ion-skeleton-text>\n <div class=\"skeleton-card-content\">\n <ion-skeleton-text\n [animated]=\"props.animated !== false\"\n style=\"width: 80%; height: 16px;\"\n ></ion-skeleton-text>\n <ion-skeleton-text\n [animated]=\"props.animated !== false\"\n style=\"width: 60%; height: 12px;\"\n ></ion-skeleton-text>\n </div>\n </div>\n }\n @default {\n <ion-skeleton-text\n [animated]=\"props.animated !== false\"\n [style.width]=\"getWidth()\"\n [style.height]=\"getHeight()\"\n [style.border-radius]=\"getBorderRadius()\"\n [class.circle]=\"isCircle()\"\n ></ion-skeleton-text>\n }\n }\n `,\n styleUrls: ['./skeleton.component.scss'],\n})\n/**\n * val-skeleton\n *\n * A skeleton loader component for content placeholders.\n * Supports various presets for common UI patterns.\n *\n * @example Text skeleton\n * <val-skeleton [props]=\"{ type: 'text' }\"></val-skeleton>\n *\n * @example Avatar skeleton\n * <val-skeleton [props]=\"{ type: 'avatar' }\"></val-skeleton>\n *\n * @example Paragraph skeleton\n * <val-skeleton [props]=\"{ type: 'paragraph', lines: 4 }\"></val-skeleton>\n *\n * @example Custom skeleton\n * <val-skeleton [props]=\"{\n * type: 'custom',\n * width: '200px',\n * height: '100px',\n * borderRadius: '12px'\n * }\"></val-skeleton>\n *\n * @input props: SkeletonMetadata - Configuration for the skeleton\n */\nexport class SkeletonComponent {\n @Input() props: SkeletonMetadata = { type: 'text' };\n\n getWidth(): string {\n if (this.props.width) return this.props.width;\n const preset = SKELETON_PRESETS[this.props.type || 'text'];\n return preset.width || '100%';\n }\n\n getHeight(): string {\n if (this.props.height) return this.props.height;\n const preset = SKELETON_PRESETS[this.props.type || 'text'];\n return preset.height || '16px';\n }\n\n getBorderRadius(): string {\n if (this.props.borderRadius) return this.props.borderRadius;\n if (this.isCircle()) return '50%';\n const preset = SKELETON_PRESETS[this.props.type || 'text'];\n return preset.borderRadius || '4px';\n }\n\n isCircle(): boolean {\n if (this.props.circle !== undefined) return this.props.circle;\n return this.props.type === 'avatar';\n }\n\n getLines(): number[] {\n const lines = this.props.lines || SKELETON_PRESETS[this.props.type || 'text'].lines || 1;\n return Array(lines).fill(0);\n }\n}\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ProgressRingMetadata } from './types';\n\n@Component({\n selector: 'val-progress-ring',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div\n class=\"progress-ring-container\"\n [style.width.px]=\"size\"\n [style.height.px]=\"size\"\n >\n <svg [attr.width]=\"size\" [attr.height]=\"size\" class=\"progress-ring\">\n <!-- Background track -->\n <circle\n class=\"progress-ring-track\"\n [attr.cx]=\"center\"\n [attr.cy]=\"center\"\n [attr.r]=\"radius\"\n [attr.stroke-width]=\"strokeWidth\"\n [style.stroke]=\"getTrackColor()\"\n fill=\"none\"\n />\n <!-- Progress arc -->\n <circle\n class=\"progress-ring-progress\"\n [class.animated]=\"props.animated !== false\"\n [attr.cx]=\"center\"\n [attr.cy]=\"center\"\n [attr.r]=\"radius\"\n [attr.stroke-width]=\"strokeWidth\"\n [style.stroke]=\"getProgressColor()\"\n [attr.stroke-dasharray]=\"circumference\"\n [attr.stroke-dashoffset]=\"dashOffset\"\n fill=\"none\"\n stroke-linecap=\"round\"\n />\n </svg>\n @if (props.showValue || props.label) {\n <div class=\"progress-ring-label\" [style.font-size.px]=\"labelFontSize\">\n {{ props.label || (props.value | number:'1.0-0') + '%' }}\n </div>\n }\n </div>\n `,\n styleUrls: ['./progress-ring.component.scss'],\n})\n/**\n * val-progress-ring\n *\n * A circular progress indicator.\n * Ideal for showing completion status, scores, or loading progress.\n *\n * @example Basic usage\n * <val-progress-ring [props]=\"{\n * value: 75,\n * showValue: true\n * }\"></val-progress-ring>\n *\n * @example Custom styling\n * <val-progress-ring [props]=\"{\n * value: 42,\n * size: 120,\n * strokeWidth: 10,\n * color: 'success',\n * label: '42 pts'\n * }\"></val-progress-ring>\n *\n * @input props: ProgressRingMetadata - Configuration for the progress ring\n */\nexport class ProgressRingComponent implements OnChanges {\n @Input() props: ProgressRingMetadata;\n\n size: number = 80;\n strokeWidth: number = 8;\n radius: number = 0;\n center: number = 0;\n circumference: number = 0;\n dashOffset: number = 0;\n labelFontSize: number = 16;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n this.calculateDimensions();\n this.calculateProgress();\n }\n }\n\n getProgressColor(): string {\n const color = this.props.color || 'primary';\n return `var(--ion-color-${color})`;\n }\n\n getTrackColor(): string {\n const color = this.props.trackColor || 'light';\n return `var(--ion-color-${color}-shade, var(--ion-color-${color}))`;\n }\n\n private calculateDimensions(): void {\n this.size = this.props.size || 80;\n this.strokeWidth = this.props.strokeWidth || 8;\n this.center = this.size / 2;\n this.radius = (this.size - this.strokeWidth) / 2;\n this.circumference = 2 * Math.PI * this.radius;\n this.labelFontSize = Math.max(12, this.size / 5);\n }\n\n private calculateProgress(): void {\n const progress = Math.min(100, Math.max(0, this.props.value));\n this.dashOffset = this.circumference - (progress / 100) * this.circumference;\n }\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { IonFab, IonFabButton, IonFabList, IonIcon, IonLabel } from '@ionic/angular/standalone';\nimport { CommonModule } from '@angular/common';\nimport { FabMetadata, FabActionMetadata } from './types';\nimport { addIcons } from 'ionicons';\nimport { add, close, share, create, trash, heart, star, camera, mic, send } from 'ionicons/icons';\n\naddIcons({ add, close, share, create, trash, heart, star, camera, mic, send });\n\n@Component({\n selector: 'val-fab',\n standalone: true,\n imports: [CommonModule, IonFab, IonFabButton, IonFabList, IonIcon, IonLabel],\n template: `\n <ion-fab\n [vertical]=\"getVertical()\"\n [horizontal]=\"getHorizontal()\"\n [activated]=\"isActivated\"\n >\n <ion-fab-button\n [color]=\"props.color || 'primary'\"\n [size]=\"props.size\"\n [disabled]=\"props.disabled\"\n [translucent]=\"props.translucent\"\n (click)=\"onMainClick()\"\n >\n <ion-icon [name]=\"getMainIcon()\"></ion-icon>\n </ion-fab-button>\n\n @if (props.actions && props.actions.length > 0) {\n <ion-fab-list [side]=\"props.side || 'top'\">\n @for (action of props.actions; track action.token || $index) {\n <ion-fab-button\n [color]=\"action.color || 'light'\"\n [disabled]=\"action.disabled\"\n (click)=\"onActionClick(action)\"\n >\n <ion-icon [name]=\"action.icon\"></ion-icon>\n </ion-fab-button>\n }\n </ion-fab-list>\n }\n </ion-fab>\n `,\n styleUrls: ['./fab.component.scss'],\n})\n/**\n * val-fab\n *\n * A Floating Action Button component with optional speed dial actions.\n *\n * @example Simple FAB\n * <val-fab [props]=\"{\n * icon: 'add',\n * color: 'primary',\n * position: 'bottom-end'\n * }\" (fabClick)=\"onCreate()\"></val-fab>\n *\n * @example Speed dial FAB\n * <val-fab [props]=\"{\n * icon: 'add',\n * iconActivated: 'close',\n * position: 'bottom-end',\n * actions: [\n * { icon: 'camera', label: 'Photo', token: 'photo' },\n * { icon: 'mic', label: 'Audio', token: 'audio' },\n * { icon: 'create', label: 'Note', token: 'note' }\n * ],\n * side: 'top'\n * }\" (actionClick)=\"onAction($event)\"></val-fab>\n *\n * @input props: FabMetadata - Configuration for the FAB\n * @output fabClick: void - Emits when main FAB is clicked (without actions)\n * @output actionClick: FabActionMetadata - Emits when an action is clicked\n */\nexport class FabComponent {\n @Input() props: FabMetadata;\n\n @Output() fabClick = new EventEmitter<void>();\n @Output() actionClick = new EventEmitter<FabActionMetadata>();\n\n isActivated = false;\n\n getVertical(): 'top' | 'bottom' | 'center' {\n const pos = this.props.position || 'bottom-end';\n if (pos.startsWith('top')) return 'top';\n if (pos.startsWith('center')) return 'center';\n return 'bottom';\n }\n\n getHorizontal(): 'start' | 'end' | 'center' {\n const pos = this.props.position || 'bottom-end';\n if (pos.endsWith('start')) return 'start';\n if (pos.endsWith('center')) return 'center';\n return 'end';\n }\n\n getMainIcon(): string {\n if (this.isActivated && this.props.iconActivated) {\n return this.props.iconActivated;\n }\n return this.props.icon;\n }\n\n onMainClick(): void {\n if (this.props.actions && this.props.actions.length > 0) {\n this.isActivated = !this.isActivated;\n } else {\n this.fabClick.emit();\n }\n }\n\n onActionClick(action: FabActionMetadata): void {\n this.actionClick.emit(action);\n if (this.props.closeOnAction !== false) {\n this.isActivated = false;\n }\n }\n}\n","/**\n * Style options for QR code dots (data modules).\n */\nexport type QrDotsStyle = 'square' | 'dots' | 'rounded' | 'extra-rounded' | 'classy' | 'classy-rounded';\n\n/**\n * Style options for QR code corner squares.\n */\nexport type QrCornersSquareStyle = 'square' | 'dot' | 'extra-rounded';\n\n/**\n * Style options for QR code corner dots.\n */\nexport type QrCornersDotStyle = 'square' | 'dot';\n\n/**\n * Output format for the generated QR code.\n */\nexport type QrOutputFormat = 'svg' | 'png' | 'jpeg' | 'webp';\n\n/**\n * Error correction level for QR codes.\n * Higher levels allow more damage tolerance but reduce data capacity.\n */\nexport type QrErrorCorrectionLevel = 'L' | 'M' | 'Q' | 'H';\n\n/**\n * Logo/image configuration for the QR code center.\n */\nexport interface QrLogoConfig {\n /** Image source URL or base64 */\n src: string;\n /** Logo width (default: 25% of QR size) */\n width?: number;\n /** Logo height (default: same as width) */\n height?: number;\n /** Margin around the logo */\n margin?: number;\n /** Border radius for rounded corners */\n borderRadius?: number;\n /** Whether to hide dots behind the logo */\n hideBackgroundDots?: boolean;\n}\n\n/**\n * Gradient configuration for QR elements.\n */\nexport interface QrGradient {\n /** Gradient type */\n type: 'linear' | 'radial';\n /** Rotation angle in degrees (for linear) */\n rotation?: number;\n /** Color stops */\n colorStops: Array<{\n offset: number;\n color: string;\n }>;\n}\n\n/**\n * Color configuration - can be solid color or gradient.\n */\nexport type QrColorConfig = string | QrGradient;\n\n/**\n * Complete configuration for QR code generation.\n */\nexport interface QrConfig {\n /** The data to encode (URL, text, etc.) */\n data: string;\n\n // === Size ===\n /** QR code width in pixels (default: 300) */\n width?: number;\n /** QR code height in pixels (default: same as width) */\n height?: number;\n /** Quiet zone margin in modules (default: 0) */\n margin?: number;\n\n // === Colors ===\n /** Color/gradient for data dots */\n dotsColor?: QrColorConfig;\n /** Background color (default: white) */\n backgroundColor?: QrColorConfig;\n /** Color for corner squares */\n cornersSquareColor?: QrColorConfig;\n /** Color for corner dots */\n cornersDotColor?: QrColorConfig;\n\n // === Styles ===\n /** Style of data dots (default: 'square') */\n dotsStyle?: QrDotsStyle;\n /** Style of corner squares (default: 'square') */\n cornersSquareStyle?: QrCornersSquareStyle;\n /** Style of corner dots (default: 'square') */\n cornersDotStyle?: QrCornersDotStyle;\n\n // === Logo ===\n /** Logo/image configuration */\n logo?: QrLogoConfig;\n\n // === Technical ===\n /** Error correction level (default: 'M') */\n errorCorrectionLevel?: QrErrorCorrectionLevel;\n\n // === Output ===\n /** Output format (default: 'png') */\n format?: QrOutputFormat;\n /** Quality for jpeg/webp (0-1, default: 1) */\n quality?: number;\n}\n\n/**\n * Result from QR code generation.\n */\nexport interface QrResult {\n /** Original configuration used */\n config: QrConfig;\n /** Generated data as base64 data URL */\n dataUrl: string;\n /** Generated data as Blob */\n blob: Blob;\n /** SVG string (only when format is 'svg') */\n svg?: string;\n /** MIME type of the generated image */\n mimeType: string;\n /** File extension */\n extension: string;\n /** Timestamp of generation */\n generatedAt: Date;\n}\n\n/**\n * Options for downloading the QR code.\n */\nexport interface QrDownloadOptions {\n /** Custom filename (without extension) */\n filename?: string;\n /** Override format for download */\n format?: QrOutputFormat;\n}\n\n/**\n * Options for sharing the QR code.\n */\nexport interface QrShareOptions {\n /** Share title */\n title?: string;\n /** Share text/description */\n text?: string;\n /** Custom filename for the shared file */\n filename?: string;\n}\n\n/**\n * Preset configurations for common use cases.\n */\nexport interface QrPreset {\n name: string;\n config: Partial<QrConfig>;\n}\n\n/**\n * Default presets for quick styling.\n */\nexport const QR_PRESETS: Record<string, Partial<QrConfig>> = {\n default: {\n width: 300,\n dotsStyle: 'square',\n dotsColor: '#000000',\n backgroundColor: '#ffffff',\n errorCorrectionLevel: 'M',\n },\n rounded: {\n width: 300,\n dotsStyle: 'rounded',\n cornersSquareStyle: 'extra-rounded',\n cornersDotStyle: 'dot',\n dotsColor: '#000000',\n backgroundColor: '#ffffff',\n },\n dots: {\n width: 300,\n dotsStyle: 'dots',\n cornersSquareStyle: 'dot',\n cornersDotStyle: 'dot',\n dotsColor: '#000000',\n backgroundColor: '#ffffff',\n },\n classy: {\n width: 300,\n dotsStyle: 'classy',\n cornersSquareStyle: 'extra-rounded',\n cornersDotStyle: 'dot',\n dotsColor: '#000000',\n backgroundColor: '#ffffff',\n },\n modern: {\n width: 300,\n dotsStyle: 'extra-rounded',\n cornersSquareStyle: 'extra-rounded',\n cornersDotStyle: 'dot',\n dotsColor: '#1a1a1a',\n backgroundColor: '#ffffff',\n margin: 2,\n },\n};\n","import { Injectable } from '@angular/core';\nimport QRCodeStyling from 'qr-code-styling';\nimport {\n QrConfig,\n QrResult,\n QrDownloadOptions,\n QrShareOptions,\n QrColorConfig,\n QrGradient,\n QR_PRESETS,\n} from './types';\n\n/**\n * QrGeneratorService\n *\n * A comprehensive service for generating, customizing, and manipulating QR codes.\n * Uses qr-code-styling library for high-quality, customizable QR code generation.\n *\n * @example Basic usage\n * ```typescript\n * const qr = await this.qrService.generate({ data: 'https://example.com' });\n * console.log(qr.dataUrl); // base64 image\n * ```\n *\n * @example With customization\n * ```typescript\n * const qr = await this.qrService.generate({\n * data: 'https://example.com',\n * width: 400,\n * dotsStyle: 'rounded',\n * dotsColor: '#3880ff',\n * logo: { src: 'logo.png', width: 60 }\n * });\n * ```\n *\n * @example Using presets\n * ```typescript\n * const qr = await this.qrService.generateFromPreset('modern', 'https://example.com');\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class QrGeneratorService {\n /**\n * Generate a QR code with the given configuration.\n *\n * @param config - QR code configuration\n * @returns Promise<QrResult> - Generated QR code result\n *\n * @example\n * ```typescript\n * const qr = await this.qrService.generate({\n * data: 'https://myapp.com/product/123',\n * width: 300,\n * dotsStyle: 'rounded',\n * dotsColor: '#000000',\n * backgroundColor: '#ffffff'\n * });\n * ```\n */\n async generate(config: QrConfig): Promise<QrResult> {\n\n // Merge with defaults\n const finalConfig: QrConfig = {\n width: 300,\n height: config.height || config.width || 300,\n margin: 0,\n dotsStyle: 'square',\n dotsColor: '#000000',\n backgroundColor: '#ffffff',\n errorCorrectionLevel: 'M',\n format: 'png',\n quality: 1,\n ...config,\n };\n\n // Build qr-code-styling options\n const qrOptions: any = {\n width: finalConfig.width,\n height: finalConfig.height,\n data: finalConfig.data,\n margin: finalConfig.margin,\n qrOptions: {\n errorCorrectionLevel: finalConfig.errorCorrectionLevel,\n },\n dotsOptions: {\n type: finalConfig.dotsStyle,\n ...this.buildColorOptions(finalConfig.dotsColor),\n },\n backgroundOptions: {\n ...this.buildColorOptions(finalConfig.backgroundColor),\n },\n cornersSquareOptions: finalConfig.cornersSquareColor || finalConfig.cornersSquareStyle\n ? {\n type: finalConfig.cornersSquareStyle,\n ...this.buildColorOptions(finalConfig.cornersSquareColor || finalConfig.dotsColor),\n }\n : undefined,\n cornersDotOptions: finalConfig.cornersDotColor || finalConfig.cornersDotStyle\n ? {\n type: finalConfig.cornersDotStyle,\n ...this.buildColorOptions(finalConfig.cornersDotColor || finalConfig.dotsColor),\n }\n : undefined,\n };\n\n // Add logo if provided\n if (finalConfig.logo) {\n qrOptions.image = finalConfig.logo.src;\n qrOptions.imageOptions = {\n hideBackgroundDots: finalConfig.logo.hideBackgroundDots ?? true,\n imageSize: 0.4,\n margin: finalConfig.logo.margin ?? 5,\n crossOrigin: 'anonymous',\n };\n }\n\n // Create QR code instance\n const qrCode = new QRCodeStyling(qrOptions);\n\n // Generate blob\n const format = finalConfig.format || 'png';\n const mimeType = this.getMimeType(format);\n const extension = format === 'jpeg' ? 'jpg' : format;\n\n let blob: Blob;\n let svg: string | undefined;\n let dataUrl: string;\n\n if (format === 'svg') {\n // Get SVG data\n const svgData = await qrCode.getRawData('svg');\n if (!svgData) {\n throw new Error('Failed to generate SVG');\n }\n blob = svgData as Blob;\n svg = await blob.text();\n dataUrl = `data:${mimeType};base64,${btoa(svg)}`;\n } else {\n // Get image blob\n const imageBlob = await qrCode.getRawData(format as 'png' | 'jpeg' | 'webp');\n if (!imageBlob) {\n throw new Error('Failed to generate image');\n }\n blob = imageBlob as Blob;\n dataUrl = await this.blobToDataUrl(blob);\n }\n\n return {\n config: finalConfig,\n dataUrl,\n blob,\n svg,\n mimeType,\n extension,\n generatedAt: new Date(),\n };\n }\n\n /**\n * Generate a QR code using a preset configuration.\n *\n * @param preset - Preset name ('default', 'rounded', 'dots', 'classy', 'modern')\n * @param data - Data to encode\n * @param overrides - Optional configuration overrides\n * @returns Promise<QrResult>\n */\n async generateFromPreset(\n preset: keyof typeof QR_PRESETS | string,\n data: string,\n overrides?: Partial<QrConfig>\n ): Promise<QrResult> {\n const presetConfig = QR_PRESETS[preset] || QR_PRESETS['default'];\n return this.generate({\n ...presetConfig,\n ...overrides,\n data,\n });\n }\n\n /**\n * Download the QR code as a file.\n *\n * @param qr - QR result to download\n * @param options - Download options\n */\n async download(qr: QrResult, options?: QrDownloadOptions): Promise<void> {\n const filename = options?.filename || `qr-code-${Date.now()}`;\n const format = options?.format || qr.config.format || 'png';\n const extension = format === 'jpeg' ? 'jpg' : format;\n\n let blob = qr.blob;\n\n // Convert if different format requested\n if (options?.format && options.format !== qr.config.format) {\n const newQr = await this.generate({\n ...qr.config,\n format: options.format,\n });\n blob = newQr.blob;\n }\n\n // Create download link\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `${filename}.${extension}`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n }\n\n /**\n * Copy the QR code to clipboard as an image.\n *\n * @param qr - QR result to copy\n * @returns Promise<boolean> - Whether copy was successful\n */\n async copyToClipboard(qr: QrResult): Promise<boolean> {\n try {\n // Clipboard API requires PNG format\n let pngBlob = qr.blob;\n\n if (qr.mimeType !== 'image/png') {\n const pngQr = await this.generate({\n ...qr.config,\n format: 'png',\n });\n pngBlob = pngQr.blob;\n }\n\n await navigator.clipboard.write([\n new ClipboardItem({\n 'image/png': pngBlob,\n }),\n ]);\n\n return true;\n } catch (error) {\n console.error('Failed to copy QR to clipboard:', error);\n return false;\n }\n }\n\n /**\n * Share the QR code using Web Share API.\n *\n * @param qr - QR result to share\n * @param options - Share options\n * @returns Promise<boolean> - Whether share was successful\n */\n async share(qr: QrResult, options?: QrShareOptions): Promise<boolean> {\n if (!navigator.share || !navigator.canShare) {\n console.warn('Web Share API not available');\n return false;\n }\n\n try {\n const filename = options?.filename || `qr-code-${Date.now()}.${qr.extension}`;\n const file = new File([qr.blob], filename, { type: qr.mimeType });\n\n const shareData: ShareData = {\n title: options?.title || 'QR Code',\n text: options?.text,\n files: [file],\n };\n\n if (navigator.canShare(shareData)) {\n await navigator.share(shareData);\n return true;\n }\n\n // Fallback without file\n await navigator.share({\n title: options?.title || 'QR Code',\n text: options?.text,\n });\n\n return true;\n } catch (error) {\n if ((error as Error).name !== 'AbortError') {\n console.error('Failed to share QR:', error);\n }\n return false;\n }\n }\n\n /**\n * Get the QR code as a base64 string (without data URL prefix).\n *\n * @param qr - QR result\n * @returns Base64 string\n */\n toBase64(qr: QrResult): string {\n const prefix = `data:${qr.mimeType};base64,`;\n if (qr.dataUrl.startsWith(prefix)) {\n return qr.dataUrl.substring(prefix.length);\n }\n return qr.dataUrl;\n }\n\n /**\n * Get the QR code as a data URL.\n *\n * @param qr - QR result\n * @returns Data URL string\n */\n toDataUrl(qr: QrResult): string {\n return qr.dataUrl;\n }\n\n /**\n * Get the QR code as a Blob.\n *\n * @param qr - QR result\n * @returns Blob\n */\n toBlob(qr: QrResult): Blob {\n return qr.blob;\n }\n\n /**\n * Check if Web Share API is available.\n */\n canShare(): boolean {\n return !!(navigator.share && navigator.canShare);\n }\n\n /**\n * Check if Clipboard API is available for images.\n */\n canCopyToClipboard(): boolean {\n return !!(navigator.clipboard && navigator.clipboard.write);\n }\n\n // === Private Helpers ===\n\n private buildColorOptions(color?: QrColorConfig): any {\n if (!color) {\n return {};\n }\n\n if (typeof color === 'string') {\n return { color };\n }\n\n // Gradient\n const gradient = color as QrGradient;\n return {\n gradient: {\n type: gradient.type,\n rotation: gradient.rotation || 0,\n colorStops: gradient.colorStops,\n },\n };\n }\n\n private getMimeType(format: string): string {\n const mimeTypes: Record<string, string> = {\n png: 'image/png',\n jpeg: 'image/jpeg',\n webp: 'image/webp',\n svg: 'image/svg+xml',\n };\n return mimeTypes[format] || 'image/png';\n }\n\n private blobToDataUrl(blob: Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => resolve(reader.result as string);\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { IonButton, IonIcon, IonSpinner } from '@ionic/angular/standalone';\nimport { Subscription } from 'rxjs';\nimport { addIcons } from 'ionicons';\nimport { downloadOutline, copyOutline, shareOutline } from 'ionicons/icons';\n\nimport { QrCodeMetadata, QrCodeActionEvent, QrDisplayTheme } from './types';\nimport { QrGeneratorService } from '../../../services/qr-generator/qr-generator.service';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\n\naddIcons({ downloadOutline, copyOutline, shareOutline });\n\n@Component({\n selector: 'val-qr-code',\n standalone: true,\n imports: [CommonModule, IonButton, IonIcon, IonSpinner],\n template: `\n <div\n class=\"qr-code-container\"\n [class]=\"getContainerClasses()\"\n [style.--border-radius]=\"getBorderRadius()\"\n [style.--padding]=\"getPadding()\"\n [style.--container-bg]=\"getContainerBackground()\"\n [style.--border-color]=\"props.borderColor || 'var(--ion-color-light-shade)'\"\n [style.--shadow]=\"getShadow()\"\n [style.--glow-color]=\"props.glowColor || '#8b5cf6'\"\n [style.--qr-border-radius]=\"getQrBorderRadius()\"\n >\n @if (props.loading) {\n <div class=\"loading-overlay\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n </div>\n }\n\n @if (props.label && props.label.position === 'top') {\n <div class=\"qr-label qr-label--top\" [style.--label-color]=\"props.label.color || 'inherit'\" [style.--label-size]=\"getLabelFontSize()\">\n @if (props.label.icon && props.label.iconPosition !== 'end') {\n <ion-icon [name]=\"props.label.icon\"></ion-icon>\n }\n <span [class]=\"'font-weight--' + (props.label.fontWeight || 'medium')\">{{ props.label.text }}</span>\n @if (props.label.icon && props.label.iconPosition === 'end') {\n <ion-icon [name]=\"props.label.icon\"></ion-icon>\n }\n </div>\n }\n\n <div class=\"qr-image-wrapper\" [style.--size]=\"getDisplaySize()\">\n <img\n [src]=\"props.qr.dataUrl\"\n [alt]=\"props.alt || 'QR Code'\"\n class=\"qr-image\"\n (load)=\"onImageLoad()\"\n (error)=\"onImageError($event)\"\n />\n </div>\n\n @if (props.label && props.label.position !== 'top') {\n <div class=\"qr-label qr-label--bottom\" [style.--label-color]=\"props.label.color || 'inherit'\" [style.--label-size]=\"getLabelFontSize()\">\n @if (props.label.icon && props.label.iconPosition !== 'end') {\n <ion-icon [name]=\"props.label.icon\"></ion-icon>\n }\n <span [class]=\"'font-weight--' + (props.label.fontWeight || 'medium')\">{{ props.label.text }}</span>\n @if (props.label.icon && props.label.iconPosition === 'end') {\n <ion-icon [name]=\"props.label.icon\"></ion-icon>\n }\n </div>\n }\n\n @if (hasActions()) {\n <div class=\"qr-actions\">\n @if (props.showDownload) {\n <ion-button\n fill=\"clear\"\n size=\"small\"\n (click)=\"onDownload()\"\n [title]=\"getDownloadLabel()\"\n >\n <ion-icon name=\"download-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n }\n\n @if (props.showCopy && canCopy) {\n <ion-button\n fill=\"clear\"\n size=\"small\"\n (click)=\"onCopy()\"\n [title]=\"getCopyLabel()\"\n >\n <ion-icon name=\"copy-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n }\n\n @if (props.showShare && canShare) {\n <ion-button\n fill=\"clear\"\n size=\"small\"\n (click)=\"onShare()\"\n [title]=\"getShareLabel()\"\n >\n <ion-icon name=\"share-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n }\n </div>\n }\n </div>\n `,\n styleUrls: ['./qr-code.component.scss'],\n})\n/**\n * val-qr-code\n *\n * A component to display QR codes generated by QrGeneratorService.\n * Provides optional action buttons for download, copy, and share.\n *\n * @example Basic usage\n * ```typescript\n * qr = await this.qrService.generate({ data: 'https://example.com' });\n * ```\n * ```html\n * <val-qr-code [props]=\"{ qr: qr }\"></val-qr-code>\n * ```\n *\n * @example With actions\n * ```html\n * <val-qr-code\n * [props]=\"{\n * qr: qr,\n * showDownload: true,\n * showCopy: true,\n * showShare: true,\n * displaySize: 200,\n * showBorder: true,\n * borderRadius: 12\n * }\"\n * (actionComplete)=\"onAction($event)\"\n * ></val-qr-code>\n * ```\n *\n * @input props: QrCodeMetadata - Configuration for the QR display\n * @output actionComplete - Emits when an action (download/copy/share) completes\n * @output imageLoad - Emits when the QR image loads\n * @output imageError - Emits when the QR image fails to load\n */\nexport class QrCodeComponent implements OnInit, OnDestroy {\n @Input() props: QrCodeMetadata;\n\n @Output() actionComplete = new EventEmitter<QrCodeActionEvent>();\n @Output() imageLoad = new EventEmitter<void>();\n @Output() imageError = new EventEmitter<Error>();\n\n canShare = false;\n canCopy = false;\n\n private langSubscription: Subscription | null = null;\n private langService = inject(LangService);\n private qrService = inject(QrGeneratorService);\n\n ngOnInit(): void {\n this.canShare = this.qrService.canShare();\n this.canCopy = this.qrService.canCopyToClipboard();\n\n if (this.hasReactiveContent()) {\n this.langSubscription = this.langService.currentLang$.subscribe(() => {\n // Trigger change detection for labels\n });\n }\n }\n\n ngOnDestroy(): void {\n this.langSubscription?.unsubscribe();\n }\n\n private hasReactiveContent(): boolean {\n return !!(\n (this.props.downloadLabelContentKey && this.props.contentClass) ||\n (this.props.copyLabelContentKey && this.props.contentClass) ||\n (this.props.shareLabelContentKey && this.props.contentClass)\n );\n }\n\n getDisplaySize(): string {\n if (this.props.displaySize) {\n return `${this.props.displaySize}px`;\n }\n return `${this.props.qr.config.width || 300}px`;\n }\n\n getBorderRadius(): string {\n return this.props.borderRadius ? `${this.props.borderRadius}px` : '0';\n }\n\n getPadding(): string {\n return this.props.padding ? `${this.props.padding}px` : '0';\n }\n\n getQrBorderRadius(): string {\n return this.props.qrBorderRadius ? `${this.props.qrBorderRadius}px` : '0';\n }\n\n getContainerClasses(): string {\n const classes: string[] = [];\n\n if (this.props.cssClass) classes.push(this.props.cssClass);\n if (this.props.showBorder) classes.push('with-border');\n if (this.props.loading) classes.push('loading');\n if (this.props.theme) classes.push(`theme--${this.props.theme}`);\n if (this.props.pulseOnHover) classes.push('pulse-on-hover');\n if (this.props.scaleOnHover) classes.push('scale-on-hover');\n if (this.props.gradient) classes.push('has-gradient');\n\n return classes.join(' ');\n }\n\n getContainerBackground(): string {\n if (this.props.gradient) {\n const { from, to, via, direction = 'to-bottom' } = this.props.gradient;\n const cssDirection = direction.replace(/-/g, ' ');\n if (via) {\n return `linear-gradient(${cssDirection}, ${from}, ${via}, ${to})`;\n }\n return `linear-gradient(${cssDirection}, ${from}, ${to})`;\n }\n return this.props.containerBackground || 'transparent';\n }\n\n getShadow(): string {\n const shadowMap: Record<string, string> = {\n none: 'none',\n sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',\n md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\n xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n };\n\n if (!this.props.shadow) return 'none';\n return shadowMap[this.props.shadow] || this.props.shadow;\n }\n\n getLabelFontSize(): string {\n return this.props.label?.fontSize ? `${this.props.label.fontSize}px` : '14px';\n }\n\n hasActions(): boolean {\n return !!(this.props.showDownload || this.props.showCopy || this.props.showShare);\n }\n\n getDownloadLabel(): string {\n if (this.props.downloadLabelContentKey && this.props.contentClass) {\n return this.langService.getText(\n this.props.contentClass,\n this.props.downloadLabelContentKey,\n this.props.downloadLabel || 'Download'\n );\n }\n return this.props.downloadLabel || 'Download';\n }\n\n getCopyLabel(): string {\n if (this.props.copyLabelContentKey && this.props.contentClass) {\n return this.langService.getText(\n this.props.contentClass,\n this.props.copyLabelContentKey,\n this.props.copyLabel || 'Copy'\n );\n }\n return this.props.copyLabel || 'Copy';\n }\n\n getShareLabel(): string {\n if (this.props.shareLabelContentKey && this.props.contentClass) {\n return this.langService.getText(\n this.props.contentClass,\n this.props.shareLabelContentKey,\n this.props.shareLabel || 'Share'\n );\n }\n return this.props.shareLabel || 'Share';\n }\n\n async onDownload(): Promise<void> {\n try {\n const options = this.props.downloadFilename\n ? { filename: this.props.downloadFilename }\n : undefined;\n await this.qrService.download(this.props.qr, options);\n this.actionComplete.emit({\n action: 'download',\n success: true,\n qr: this.props.qr,\n });\n } catch (error) {\n this.actionComplete.emit({\n action: 'download',\n success: false,\n qr: this.props.qr,\n error: error as Error,\n });\n }\n }\n\n async onCopy(): Promise<void> {\n try {\n const success = await this.qrService.copyToClipboard(this.props.qr);\n this.actionComplete.emit({\n action: 'copy',\n success,\n qr: this.props.qr,\n });\n } catch (error) {\n this.actionComplete.emit({\n action: 'copy',\n success: false,\n qr: this.props.qr,\n error: error as Error,\n });\n }\n }\n\n async onShare(): Promise<void> {\n try {\n const options: { title?: string; text?: string; filename?: string } = {};\n if (this.props.shareTitle) options.title = this.props.shareTitle;\n if (this.props.shareText) options.text = this.props.shareText;\n if (this.props.shareFilename) options.filename = this.props.shareFilename;\n\n const success = await this.qrService.share(\n this.props.qr,\n Object.keys(options).length > 0 ? options : undefined\n );\n this.actionComplete.emit({\n action: 'share',\n success,\n qr: this.props.qr,\n });\n } catch (error) {\n this.actionComplete.emit({\n action: 'share',\n success: false,\n qr: this.props.qr,\n error: error as Error,\n });\n }\n }\n\n onImageLoad(): void {\n this.imageLoad.emit();\n }\n\n onImageError(_event: Event): void {\n const error = new Error('Failed to load QR code image');\n this.imageError.emit(error);\n }\n}\n","import { Color } from '@ionic/core';\n\n/**\n * Time unit for countdown display.\n */\nexport interface CountdownUnit {\n /** Value of the unit */\n value: number;\n /** Label for the unit */\n label: string;\n /** Whether to show this unit */\n show: boolean;\n}\n\n/**\n * Countdown time breakdown.\n */\nexport interface CountdownTime {\n days: number;\n hours: number;\n minutes: number;\n seconds: number;\n totalSeconds: number;\n isExpired: boolean;\n}\n\n/**\n * Labels for countdown units.\n */\nexport interface CountdownLabels {\n days?: string;\n hours?: string;\n minutes?: string;\n seconds?: string;\n /** Singular forms (optional) */\n day?: string;\n hour?: string;\n minute?: string;\n second?: string;\n}\n\n/**\n * Default labels in Spanish.\n */\nexport const DEFAULT_COUNTDOWN_LABELS: CountdownLabels = {\n days: 'días',\n hours: 'horas',\n minutes: 'minutos',\n seconds: 'segundos',\n day: 'día',\n hour: 'hora',\n minute: 'minuto',\n second: 'segundo',\n};\n\n/**\n * Default labels in English.\n */\nexport const DEFAULT_COUNTDOWN_LABELS_EN: CountdownLabels = {\n days: 'days',\n hours: 'hours',\n minutes: 'minutes',\n seconds: 'seconds',\n day: 'day',\n hour: 'hour',\n minute: 'minute',\n second: 'second',\n};\n\n/**\n * Metadata for the countdown component.\n */\nexport interface CountdownMetadata {\n /** Target date/time to count down to */\n targetDate: Date | string | number;\n\n // === Display options ===\n /** Display format */\n format?: 'full' | 'compact' | 'minimal' | 'digital';\n /** Show days */\n showDays?: boolean;\n /** Show hours */\n showHours?: boolean;\n /** Show minutes */\n showMinutes?: boolean;\n /** Show seconds */\n showSeconds?: boolean;\n /** Show labels below numbers */\n showLabels?: boolean;\n /** Show separators between units */\n showSeparators?: boolean;\n /** Separator character (default: ':') */\n separator?: string;\n /** Pad numbers with zeros */\n padNumbers?: boolean;\n\n // === Labels ===\n /** Custom labels for time units */\n labels?: CountdownLabels;\n /** Message to show when expired */\n expiredMessage?: string;\n /** Show expired message or hide component */\n showExpiredMessage?: boolean;\n\n // === Styling ===\n /** Component color */\n color?: Color;\n /** Size variant */\n size?: 'small' | 'medium' | 'large';\n /** Custom CSS class */\n cssClass?: string;\n\n // === Behavior ===\n /** Auto-start countdown */\n autoStart?: boolean;\n /** Update interval in ms (default: 1000) */\n updateInterval?: number;\n\n // === Reactive content ===\n /** Content key for expired message */\n expiredMessageContentKey?: string;\n /** Content class for reactive content */\n contentClass?: string;\n}\n\n/**\n * Event emitted when countdown completes.\n */\nexport interface CountdownCompleteEvent {\n /** Target date that was reached */\n targetDate: Date;\n /** Timestamp when completed */\n completedAt: Date;\n}\n\n/**\n * Event emitted on each countdown tick.\n */\nexport interface CountdownTickEvent {\n /** Current time breakdown */\n time: CountdownTime;\n /** Percentage of time elapsed (if start time known) */\n percentageElapsed?: number;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, Output, EventEmitter, OnInit, OnDestroy, inject } from '@angular/core';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport {\n CountdownMetadata,\n CountdownTime,\n CountdownCompleteEvent,\n CountdownTickEvent,\n CountdownLabels,\n DEFAULT_COUNTDOWN_LABELS,\n} from './types';\n\n@Component({\n selector: 'val-countdown',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div\n class=\"countdown-container\"\n [class]=\"props.cssClass\"\n [class.expired]=\"isExpired\"\n [class.format-full]=\"props.format === 'full' || !props.format\"\n [class.format-compact]=\"props.format === 'compact'\"\n [class.format-minimal]=\"props.format === 'minimal'\"\n [class.format-digital]=\"props.format === 'digital'\"\n [class.size-small]=\"props.size === 'small'\"\n [class.size-medium]=\"props.size === 'medium' || !props.size\"\n [class.size-large]=\"props.size === 'large'\"\n [style.--countdown-color]=\"getColor()\"\n >\n @if (isExpired && props.showExpiredMessage !== false) {\n <div class=\"expired-message\">\n {{ getExpiredMessage() }}\n </div>\n } @else if (!isExpired) {\n <div class=\"countdown-units\">\n @if (shouldShowDays()) {\n <div class=\"countdown-unit\">\n <span class=\"countdown-value\">{{ formatNumber(time.days) }}</span>\n @if (props.showLabels !== false) {\n <span class=\"countdown-label\">{{ getLabel('days', time.days) }}</span>\n }\n </div>\n @if (props.showSeparators !== false && shouldShowHours()) {\n <span class=\"countdown-separator\">{{ props.separator || ':' }}</span>\n }\n }\n\n @if (shouldShowHours()) {\n <div class=\"countdown-unit\">\n <span class=\"countdown-value\">{{ formatNumber(time.hours) }}</span>\n @if (props.showLabels !== false) {\n <span class=\"countdown-label\">{{ getLabel('hours', time.hours) }}</span>\n }\n </div>\n @if (props.showSeparators !== false && shouldShowMinutes()) {\n <span class=\"countdown-separator\">{{ props.separator || ':' }}</span>\n }\n }\n\n @if (shouldShowMinutes()) {\n <div class=\"countdown-unit\">\n <span class=\"countdown-value\">{{ formatNumber(time.minutes) }}</span>\n @if (props.showLabels !== false) {\n <span class=\"countdown-label\">{{ getLabel('minutes', time.minutes) }}</span>\n }\n </div>\n @if (props.showSeparators !== false && shouldShowSeconds()) {\n <span class=\"countdown-separator\">{{ props.separator || ':' }}</span>\n }\n }\n\n @if (shouldShowSeconds()) {\n <div class=\"countdown-unit\">\n <span class=\"countdown-value\">{{ formatNumber(time.seconds) }}</span>\n @if (props.showLabels !== false) {\n <span class=\"countdown-label\">{{ getLabel('seconds', time.seconds) }}</span>\n }\n </div>\n }\n </div>\n }\n </div>\n `,\n styleUrls: ['./countdown.component.scss'],\n})\n/**\n * val-countdown\n *\n * A countdown timer component that counts down to a target date.\n *\n * @example Basic usage\n * ```html\n * <val-countdown\n * [props]=\"{\n * targetDate: '2024-12-31T23:59:59',\n * format: 'full'\n * }\"\n * (complete)=\"onCountdownComplete()\"\n * ></val-countdown>\n * ```\n *\n * @example Compact format\n * ```html\n * <val-countdown\n * [props]=\"{\n * targetDate: raffleEndDate,\n * format: 'compact',\n * showDays: true,\n * showSeconds: false,\n * color: 'danger',\n * expiredMessage: '¡Sorteo finalizado!'\n * }\"\n * ></val-countdown>\n * ```\n *\n * @example Digital clock style\n * ```html\n * <val-countdown\n * [props]=\"{\n * targetDate: deadline,\n * format: 'digital',\n * showLabels: false,\n * size: 'large'\n * }\"\n * ></val-countdown>\n * ```\n */\nexport class CountdownComponent implements OnInit, OnDestroy {\n @Input() props: CountdownMetadata;\n\n @Output() complete = new EventEmitter<CountdownCompleteEvent>();\n @Output() tick = new EventEmitter<CountdownTickEvent>();\n\n time: CountdownTime = {\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n totalSeconds: 0,\n isExpired: false,\n };\n\n isExpired = false;\n\n private intervalId: any = null;\n private langService = inject(LangService);\n\n ngOnInit(): void {\n if (this.props.autoStart !== false) {\n this.start();\n }\n }\n\n ngOnDestroy(): void {\n this.stop();\n }\n\n /**\n * Start the countdown timer.\n */\n start(): void {\n this.updateTime();\n const interval = this.props.updateInterval || 1000;\n this.intervalId = setInterval(() => this.updateTime(), interval);\n }\n\n /**\n * Stop the countdown timer.\n */\n stop(): void {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n }\n\n /**\n * Reset and restart the countdown.\n */\n restart(): void {\n this.stop();\n this.isExpired = false;\n this.start();\n }\n\n private updateTime(): void {\n const target = this.getTargetDate();\n const now = new Date();\n const diff = target.getTime() - now.getTime();\n\n if (diff <= 0) {\n this.time = {\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0,\n totalSeconds: 0,\n isExpired: true,\n };\n this.isExpired = true;\n this.stop();\n this.complete.emit({\n targetDate: target,\n completedAt: now,\n });\n return;\n }\n\n const totalSeconds = Math.floor(diff / 1000);\n const days = Math.floor(totalSeconds / 86400);\n const hours = Math.floor((totalSeconds % 86400) / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n\n this.time = {\n days,\n hours,\n minutes,\n seconds,\n totalSeconds,\n isExpired: false,\n };\n\n this.tick.emit({ time: this.time });\n }\n\n private getTargetDate(): Date {\n const target = this.props.targetDate;\n if (target instanceof Date) {\n return target;\n }\n if (typeof target === 'number') {\n return new Date(target);\n }\n return new Date(target);\n }\n\n shouldShowDays(): boolean {\n if (this.props.showDays === false) return false;\n if (this.props.showDays === true) return true;\n // Auto: show if more than 0 days or format is full\n return this.time.days > 0 || this.props.format === 'full';\n }\n\n shouldShowHours(): boolean {\n if (this.props.showHours === false) return false;\n return true;\n }\n\n shouldShowMinutes(): boolean {\n if (this.props.showMinutes === false) return false;\n return true;\n }\n\n shouldShowSeconds(): boolean {\n if (this.props.showSeconds === false) return false;\n if (this.props.format === 'minimal') return false;\n return true;\n }\n\n formatNumber(value: number): string {\n if (this.props.padNumbers === false) {\n return String(value);\n }\n return String(value).padStart(2, '0');\n }\n\n getLabel(unit: 'days' | 'hours' | 'minutes' | 'seconds', value: number): string {\n const labels = this.props.labels || DEFAULT_COUNTDOWN_LABELS;\n const isSingular = value === 1;\n\n // Get singular or plural form\n const singularKey = unit.slice(0, -1) as 'day' | 'hour' | 'minute' | 'second';\n\n if (isSingular && labels[singularKey]) {\n return labels[singularKey]!;\n }\n\n return labels[unit] || unit;\n }\n\n getExpiredMessage(): string {\n if (this.props.expiredMessageContentKey && this.props.contentClass) {\n return this.langService.getText(\n this.props.contentClass,\n this.props.expiredMessageContentKey,\n this.props.expiredMessage || 'Tiempo agotado'\n );\n }\n return this.props.expiredMessage || 'Tiempo agotado';\n }\n\n getColor(): string {\n if (this.props.color) {\n return `var(--ion-color-${this.props.color})`;\n }\n return 'var(--ion-color-primary)';\n }\n}\n","import { Color } from '@ionic/core';\n\n/**\n * Metadata for the price tag component.\n */\nexport interface PriceTagMetadata {\n /** Price amount */\n amount: number;\n /** Currency code (ISO 4217) */\n currency?: string;\n /** Currency symbol (overrides auto-detection) */\n currencySymbol?: string;\n /** Original price (for showing discounts) */\n originalAmount?: number;\n /** Discount percentage to show */\n discountPercentage?: number;\n\n // === Display options ===\n /** Size variant */\n size?: 'small' | 'medium' | 'large' | 'xlarge';\n /** Display variant */\n variant?: 'default' | 'highlight' | 'sale' | 'free' | 'badge';\n /** Show currency code after amount */\n showCurrencyCode?: boolean;\n /** Decimal places */\n decimals?: number;\n /** Period/frequency label (e.g., \"/mes\", \"por boleto\") */\n period?: string;\n /** Prefix text (e.g., \"Desde\") */\n prefix?: string;\n /** Suffix text (e.g., \"MXN\") */\n suffix?: string;\n\n // === Styling ===\n /** Component color */\n color?: Color;\n /** Custom CSS class */\n cssClass?: string;\n /** Text alignment */\n align?: 'left' | 'center' | 'right';\n /** Show currency symbol */\n showSymbol?: boolean;\n\n // === Reactive content ===\n /** Content key for prefix */\n prefixContentKey?: string;\n /** Content key for period */\n periodContentKey?: string;\n /** Content class for reactive content */\n contentClass?: string;\n}\n\n/**\n * Currency configuration.\n */\nexport interface CurrencyInfo {\n code: string;\n symbol: string;\n symbolPosition: 'prefix' | 'suffix';\n decimals: number;\n thousandsSeparator: string;\n decimalSeparator: string;\n}\n\n/**\n * Common currency configurations.\n */\nexport const CURRENCY_INFO: Record<string, CurrencyInfo> = {\n USD: { code: 'USD', symbol: '$', symbolPosition: 'prefix', decimals: 2, thousandsSeparator: ',', decimalSeparator: '.' },\n MXN: { code: 'MXN', symbol: '$', symbolPosition: 'prefix', decimals: 2, thousandsSeparator: ',', decimalSeparator: '.' },\n EUR: { code: 'EUR', symbol: '€', symbolPosition: 'suffix', decimals: 2, thousandsSeparator: '.', decimalSeparator: ',' },\n GBP: { code: 'GBP', symbol: '£', symbolPosition: 'prefix', decimals: 2, thousandsSeparator: ',', decimalSeparator: '.' },\n COP: { code: 'COP', symbol: '$', symbolPosition: 'prefix', decimals: 0, thousandsSeparator: '.', decimalSeparator: ',' },\n ARS: { code: 'ARS', symbol: '$', symbolPosition: 'prefix', decimals: 2, thousandsSeparator: '.', decimalSeparator: ',' },\n CLP: { code: 'CLP', symbol: '$', symbolPosition: 'prefix', decimals: 0, thousandsSeparator: '.', decimalSeparator: ',' },\n PEN: { code: 'PEN', symbol: 'S/', symbolPosition: 'prefix', decimals: 2, thousandsSeparator: ',', decimalSeparator: '.' },\n BRL: { code: 'BRL', symbol: 'R$', symbolPosition: 'prefix', decimals: 2, thousandsSeparator: '.', decimalSeparator: ',' },\n};\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, inject } from '@angular/core';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { PriceTagMetadata, CurrencyInfo, CURRENCY_INFO } from './types';\n\n@Component({\n selector: 'val-price-tag',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div\n class=\"price-tag\"\n [class]=\"props.cssClass\"\n [class.size-small]=\"props.size === 'small'\"\n [class.size-medium]=\"props.size === 'medium' || !props.size\"\n [class.size-large]=\"props.size === 'large'\"\n [class.size-xlarge]=\"props.size === 'xlarge'\"\n [class.variant-default]=\"props.variant === 'default' || !props.variant\"\n [class.variant-highlight]=\"props.variant === 'highlight'\"\n [class.variant-sale]=\"props.variant === 'sale'\"\n [class.variant-free]=\"props.variant === 'free'\"\n [class.variant-badge]=\"props.variant === 'badge'\"\n [class.has-discount]=\"hasDiscount\"\n [class.align-left]=\"props.align === 'left'\"\n [class.align-center]=\"props.align === 'center' || !props.align\"\n [class.align-right]=\"props.align === 'right'\"\n [style.--price-color]=\"getColor()\"\n >\n @if (props.prefix) {\n <span class=\"price-prefix\">{{ getPrefix() }}</span>\n }\n\n @if (hasDiscount && props.originalAmount) {\n <span class=\"original-price\">\n {{ formatPrice(props.originalAmount) }}\n </span>\n }\n\n <span class=\"current-price\">\n @if (props.variant === 'free' || props.amount === 0) {\n <span class=\"free-text\">Gratis</span>\n } @else {\n @if (currencyInfo.symbolPosition === 'prefix' && props.showSymbol !== false) {\n <span class=\"currency-symbol\">{{ getSymbol() }}</span>\n }\n <span class=\"amount\">{{ formatAmount() }}</span>\n @if (currencyInfo.symbolPosition === 'suffix' && props.showSymbol !== false) {\n <span class=\"currency-symbol suffix\">{{ getSymbol() }}</span>\n }\n }\n </span>\n\n @if (props.showCurrencyCode && props.currency) {\n <span class=\"currency-code\">{{ props.currency }}</span>\n }\n\n @if (props.suffix) {\n <span class=\"price-suffix\">{{ props.suffix }}</span>\n }\n\n @if (props.period) {\n <span class=\"price-period\">{{ getPeriod() }}</span>\n }\n\n @if (props.discountPercentage && props.discountPercentage > 0) {\n <span class=\"discount-badge\">\n -{{ props.discountPercentage }}%\n </span>\n }\n </div>\n `,\n styleUrls: ['./price-tag.component.scss'],\n})\n/**\n * val-price-tag\n *\n * A component for displaying prices with currency formatting and discount support.\n *\n * @example Basic usage\n * ```html\n * <val-price-tag [props]=\"{ amount: 99.99, currency: 'MXN' }\"></val-price-tag>\n * ```\n *\n * @example With discount\n * ```html\n * <val-price-tag\n * [props]=\"{\n * amount: 79.99,\n * originalAmount: 99.99,\n * currency: 'MXN',\n * variant: 'sale',\n * discountPercentage: 20\n * }\"\n * ></val-price-tag>\n * ```\n *\n * @example With period\n * ```html\n * <val-price-tag\n * [props]=\"{\n * amount: 10,\n * currency: 'MXN',\n * period: 'por boleto',\n * size: 'large'\n * }\"\n * ></val-price-tag>\n * ```\n *\n * @example Highlight variant\n * ```html\n * <val-price-tag\n * [props]=\"{\n * amount: 500,\n * currency: 'MXN',\n * prefix: 'Desde',\n * variant: 'highlight',\n * size: 'xlarge'\n * }\"\n * ></val-price-tag>\n * ```\n */\nexport class PriceTagComponent {\n @Input() props: PriceTagMetadata;\n\n private langService = inject(LangService);\n\n get currencyInfo(): CurrencyInfo {\n const currency = this.props.currency || 'MXN';\n return CURRENCY_INFO[currency] || CURRENCY_INFO['USD'];\n }\n\n get hasDiscount(): boolean {\n return !!(\n this.props.originalAmount &&\n this.props.originalAmount > this.props.amount\n );\n }\n\n getSymbol(): string {\n return this.props.currencySymbol || this.currencyInfo.symbol;\n }\n\n formatAmount(): string {\n const decimals = this.props.decimals ?? this.currencyInfo.decimals;\n const info = this.currencyInfo;\n\n // Format number\n const parts = this.props.amount.toFixed(decimals).split('.');\n const integerPart = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, info.thousandsSeparator);\n\n if (decimals > 0 && parts[1]) {\n return `${integerPart}${info.decimalSeparator}${parts[1]}`;\n }\n\n return integerPart;\n }\n\n formatPrice(amount: number): string {\n const decimals = this.props.decimals ?? this.currencyInfo.decimals;\n const info = this.currencyInfo;\n const symbol = this.getSymbol();\n\n // Format number\n const parts = amount.toFixed(decimals).split('.');\n const integerPart = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, info.thousandsSeparator);\n const formattedNumber = decimals > 0 && parts[1]\n ? `${integerPart}${info.decimalSeparator}${parts[1]}`\n : integerPart;\n\n // Add symbol\n if (info.symbolPosition === 'prefix') {\n return `${symbol}${formattedNumber}`;\n }\n return `${formattedNumber}${symbol}`;\n }\n\n getPrefix(): string {\n if (this.props.prefixContentKey && this.props.contentClass) {\n return this.langService.getText(\n this.props.contentClass,\n this.props.prefixContentKey,\n this.props.prefix || ''\n );\n }\n return this.props.prefix || '';\n }\n\n getPeriod(): string {\n if (this.props.periodContentKey && this.props.contentClass) {\n return this.langService.getText(\n this.props.contentClass,\n this.props.periodContentKey,\n this.props.period || ''\n );\n }\n return this.props.period || '';\n }\n\n getColor(): string {\n if (this.props.color) {\n return `var(--ion-color-${this.props.color})`;\n }\n return 'var(--ion-color-dark)';\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { BoxComponent } from '../../atoms/box/box.component';\nimport { IconComponent } from '../../atoms/icon/icon.component';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { AlertBoxMetadata, ReactiveAlertBoxMetadata } from './types';\n\n@Component({\n selector: 'val-alert-box',\n standalone: true,\n imports: [CommonModule, BoxComponent, IconComponent, TextComponent],\n template: `\n <val-box [props]=\"props.box\">\n <div class=\"content-container\" body>\n <val-icon [props]=\"props.icon\"></val-icon>\n <!-- Support both legacy and reactive patterns -->\n @if (isLegacyProps) {\n <val-text class=\"text\" [props]=\"getLegacyTextProps()\" />\n } @else {\n <val-text class=\"text\" [props]=\"computedTextProps\" />\n }\n </div>\n </val-box>\n `,\n styleUrls: ['./alert-box.component.scss'],\n})\n/**\n * val-alert-box\n *\n * Displays an alert box with an icon and text, using a styled box container.\n * Supports both static and reactive content patterns.\n *\n * @example\n * // Legacy pattern with TextMetadata\n * <val-alert-box [props]=\"{ box: {...}, icon: {...}, text: {...} }\"></val-alert-box>\n *\n * // Reactive pattern with simplified configuration\n * <val-alert-box [props]=\"{ box: {...}, icon: {...}, textConfig: { key: 'alert.warning' } }\"></val-alert-box>\n *\n * @input props: AlertBoxMetadata | ReactiveAlertBoxMetadata - Configuration for the alert box\n */\nexport class AlertBoxComponent implements OnInit, OnDestroy {\n private subscriptions = new Subscription();\n\n /**\n * Alert box configuration object.\n * Supports both legacy AlertBoxMetadata and ReactiveAlertBoxMetadata patterns.\n */\n @Input()\n props: AlertBoxMetadata | ReactiveAlertBoxMetadata;\n\n /** Computed text properties for reactive pattern */\n computedTextProps: any;\n\n /** Whether this is using the legacy props pattern */\n get isLegacyProps(): boolean {\n return 'text' in this.props && typeof (this.props as any).text === 'object';\n }\n\n /** Get text props for legacy pattern */\n getLegacyTextProps(): any {\n return (this.props as AlertBoxMetadata).text;\n }\n\n constructor(private langService: LangService) {}\n\n ngOnInit() {\n if (!this.isLegacyProps) {\n this.initializeReactiveTextProps();\n }\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n\n private initializeReactiveTextProps() {\n const reactiveProps = this.props as ReactiveAlertBoxMetadata;\n\n // Base text properties with styling\n this.computedTextProps = {\n size: reactiveProps.textStyle?.size || 'medium',\n color: reactiveProps.textStyle?.color,\n bold: reactiveProps.textStyle?.bold || false,\n };\n\n // Add content configuration\n if (reactiveProps.text !== undefined) {\n // Static text\n this.computedTextProps.content = reactiveProps.text;\n } else if (reactiveProps.textConfig) {\n // Reactive content\n this.computedTextProps.contentConfig = reactiveProps.textConfig;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { ButtonGroupMetadata } from './types';\n\n@Component({\n selector: 'val-button-group',\n standalone: true,\n imports: [CommonModule, ButtonComponent],\n template: `\n <div [ngClass]=\"['group-container', Position]\" [class.column]=\"props.columned\" style=\"width: 100%;\">\n <val-button\n *ngFor=\"let b of props.buttons\"\n [props]=\"b\"\n (onClick)=\"clickHandler(b?.token)\"\n [ngStyle]=\"{ width: props.buttons.length === 1 ? '100%' : 'auto' }\"\n ></val-button>\n </div>\n `,\n styleUrls: ['./button-group.component.scss'],\n})\n/**\n * val-button-group\n *\n * Displays a group of buttons with configurable layout and position.\n *\n * @example\n * <val-button-group [props]=\"{ buttons: [...], position: 'center', columned: false }\" (onClick)=\"handler($event)\"></val-button-group>\n *\n * @input props: ButtonGroupMetadata - Configuration for the button group (buttons, position, columned)\n * @output onClick - Emits the token of the clicked button\n */\nexport class ButtonGroupComponent implements OnInit {\n /**\n * Button group configuration object.\n * @type {ButtonGroupMetadata}\n * @property buttons - Array of button configurations.\n * @property position - Position of the button group ('center' | 'left' | 'right' | 'spaced').\n * @property columned - Whether the buttons are displayed in a column.\n */\n @Input()\n props: ButtonGroupMetadata;\n\n /**\n * Event emitted with the token of the clicked button.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor() {}\n\n ngOnInit() {}\n\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n\n get Position(): string {\n if (this.props.buttons.length === 1 && this.props.position === 'spaced') {\n return 'right';\n }\n\n return this.props.position;\n }\n}\n","import { ButtonMetadata, ToolbarAction } from '../../types';\n\nexport enum CardType {\n native = 'native',\n checker = 'checker',\n tappable = 'tappable',\n complex = 'complex',\n}\n\nexport interface CardClickEvent {\n section: CardSection;\n token?: string;\n}\n\nexport enum CardSection {\n headerLeft,\n headerRight,\n content,\n footer,\n footerExtra,\n}\n\nexport interface CardMetadata {\n token?: string;\n type: CardType;\n title?: string;\n overtitle?: string;\n content?: string;\n image?: string;\n footerActions: ButtonMetadata[];\n footerComplexActions: ToolbarAction[];\n leftActions: ToolbarAction[];\n rightActions: ToolbarAction[];\n selected: boolean;\n headerText?: string;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport {\n IonButton,\n IonButtons,\n IonCard,\n IonCardContent,\n IonCardHeader,\n IonCardSubtitle,\n IonCardTitle,\n IonCheckbox,\n IonIcon,\n} from '@ionic/angular/standalone';\nimport { AvatarComponent } from '../../atoms/avatar/avatar.component';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { ImageComponent } from '../../atoms/image/image.component';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { ToolbarActionType } from '../../types';\nimport { CardClickEvent, CardMetadata, CardSection, CardType } from './types';\n\n@Component({\n selector: 'val-card',\n standalone: true,\n imports: [\n CommonModule,\n ButtonComponent,\n AvatarComponent,\n ImageComponent,\n TextComponent,\n IonCard,\n IonCardContent,\n IonCardHeader,\n IonCardTitle,\n IonCardSubtitle,\n IonCheckbox,\n IonButtons,\n IonButton,\n IonIcon,\n ],\n template: `\n <ion-card *ngIf=\"props.type === types.native\">\n <img alt=\"image\" [src]=\"props.image\" />\n <ion-card-header *ngIf=\"props.title || props.overtitle\">\n <ion-card-title *ngIf=\"props.title\">{{ props.title }}</ion-card-title>\n <ion-card-subtitle *ngIf=\"props.overtitle\">{{ props.overtitle }}</ion-card-subtitle>\n </ion-card-header>\n\n <ion-card-content *ngIf=\"props.content\">{{ props.content }}</ion-card-content>\n\n <val-button\n *ngFor=\"let b of props.footerActions\"\n [props]=\"b\"\n (onClick)=\"clickHandler(sections.footer, b.token)\"\n ></val-button>\n </ion-card>\n\n <ion-card\n *ngIf=\"props.type === types.tappable\"\n (click)=\"clickHandler(sections.content, props.token)\"\n class=\"tapable\"\n >\n <img alt=\"image\" [src]=\"props.image\" />\n <ion-card-header *ngIf=\"props.title || props.overtitle\">\n <ion-card-title *ngIf=\"props.title\">{{ props.title }}</ion-card-title>\n <ion-card-subtitle *ngIf=\"props.overtitle\">{{ props.overtitle }}</ion-card-subtitle>\n </ion-card-header>\n\n <ion-card-content *ngIf=\"props.content\">{{ props.content }}</ion-card-content>\n </ion-card>\n\n <ion-card\n *ngIf=\"props.type === types.checker\"\n (click)=\"clickHandler(sections.content, props.token)\"\n class=\"tapable\"\n >\n <ion-card-header *ngIf=\"props.title || props.overtitle\" class=\"checker\">\n <div>\n <ion-card-subtitle *ngIf=\"props.overtitle\">{{ props.overtitle }}</ion-card-subtitle>\n <ion-card-title *ngIf=\"props.title\">{{ props.title }}</ion-card-title>\n </div>\n <div>\n <ion-checkbox [checked]=\"props.selected\"></ion-checkbox>\n </div>\n </ion-card-header>\n\n <ion-card-content *ngIf=\"props.content\">{{ props.content }}</ion-card-content>\n </ion-card>\n\n <ion-card *ngIf=\"props.type === types.complex\" class=\"complex\">\n <ion-card-header class=\"complex-header\">\n <ion-buttons style=\"display: flex; align-items: center\" *ngIf=\"props.leftActions.length > 0\">\n <ng-container *ngFor=\"let action of props.leftActions\">\n <ion-button\n *ngIf=\"action.type === actionTypes.ICON\"\n (click)=\"clickHandler(sections.headerLeft, action.token)\"\n >\n <ion-icon slot=\"icon-only\" [name]=\"action.description\" color=\"dark\"></ion-icon>\n </ion-button>\n <val-avatar\n style=\"margin-right: 4px; cursor: pointer\"\n *ngIf=\"action.type === actionTypes.AVATAR\"\n [props]=\"{ size: 'small', image: action.description, default: '' }\"\n (onClick)=\"clickHandler(sections.headerLeft, action.token)\"\n ></val-avatar>\n <val-image\n *ngIf=\"action.type === actionTypes.IMAGE\"\n [props]=\"action.image\"\n (click)=\"clickHandler(sections.headerLeft, action.token)\"\n ></val-image>\n <ion-button\n *ngIf=\"action.type === actionTypes.BUTTON\"\n (click)=\"clickHandler(sections.headerLeft, action.token)\"\n >\n {{ action.description }}\n </ion-button>\n <div *ngIf=\"props.headerText\">\n <val-text [props]=\"{ content: props.headerText, color: 'dark', bold: true, size: 'medium' }\" />\n </div>\n </ng-container>\n </ion-buttons>\n <ion-buttons style=\"display: flex; align-items: center\" *ngIf=\"props.rightActions.length > 0\">\n <ng-container *ngFor=\"let action of props.rightActions\">\n <ion-button\n *ngIf=\"action.type === actionTypes.ICON\"\n (click)=\"clickHandler(sections.headerRight, action.token)\"\n >\n <ion-icon slot=\"icon-only\" [name]=\"action.description\" color=\"dark\"></ion-icon>\n </ion-button>\n <val-avatar\n style=\"margin-right: 4px; cursor: pointer\"\n *ngIf=\"action.type === actionTypes.AVATAR\"\n [props]=\"{ size: 'small', image: action.description, default: '' }\"\n (onClick)=\"clickHandler(sections.headerRight, action.token)\"\n ></val-avatar>\n <val-image\n *ngIf=\"action.type === actionTypes.IMAGE\"\n [props]=\"action.image\"\n (click)=\"clickHandler(sections.headerRight, action.token)\"\n ></val-image>\n <ion-button\n *ngIf=\"action.type === actionTypes.BUTTON\"\n (click)=\"clickHandler(sections.headerRight, action.token)\"\n >\n {{ action.description }}\n </ion-button>\n </ng-container>\n </ion-buttons>\n </ion-card-header>\n\n <div class=\"tapable\" (click)=\"clickHandler(sections.content, props.token)\">\n <ion-card-header *ngIf=\"props.title || props.overtitle\" class=\"complex-header\">\n <div>\n <ion-card-subtitle *ngIf=\"props.overtitle\">{{ props.overtitle }}</ion-card-subtitle>\n <ion-card-title *ngIf=\"props.title\">{{ props.title }}</ion-card-title>\n </div>\n </ion-card-header>\n\n <img alt=\"image\" [src]=\"props.image\" />\n <ion-card-content *ngIf=\"props.content\" class=\"complex-content\">{{ props.content }}</ion-card-content>\n </div>\n <val-button\n *ngFor=\"let b of props.footerActions\"\n [props]=\"b\"\n (onClick)=\"clickHandler(sections.footer, b.token)\"\n ></val-button>\n <ion-buttons\n style=\"display: flex; align-items: center; justify-content: flex-end; margin: 8px\"\n *ngIf=\"props.footerComplexActions.length > 0\"\n >\n <ng-container *ngFor=\"let action of props.footerComplexActions\">\n <ion-button\n *ngIf=\"action.type === actionTypes.ICON\"\n (click)=\"clickHandler(sections.footerExtra, action.token)\"\n >\n <ion-icon slot=\"icon-only\" [name]=\"action.description\" color=\"dark\"></ion-icon>\n </ion-button>\n <val-avatar\n style=\"margin-right: 4px; cursor: pointer\"\n *ngIf=\"action.type === actionTypes.AVATAR\"\n [props]=\"{ size: 'small', image: action.description, default: '' }\"\n (onClick)=\"clickHandler(sections.footerExtra, action.token)\"\n ></val-avatar>\n <val-image\n *ngIf=\"action.type === actionTypes.IMAGE\"\n [props]=\"action.image\"\n (click)=\"clickHandler(sections.footerExtra, action.token)\"\n ></val-image>\n <ion-button\n *ngIf=\"action.type === actionTypes.BUTTON\"\n (click)=\"clickHandler(sections.footerExtra, action.token)\"\n color=\"dark\"\n >\n {{ action.description }}\n </ion-button>\n </ng-container>\n </ion-buttons>\n </ion-card>\n `,\n styleUrls: ['./card.component.scss'],\n})\n/**\n * val-card\n *\n * A flexible card component supporting images, titles, content, actions, and custom sections.\n *\n * @example\n * <val-card [props]=\"{ type: 'native', title: 'Card', image: 'url', content: '...', actions: [...] }\" (onClick)=\"handler($event)\"></val-card>\n *\n * @input props: CardMetadata - Configuration for the card (type, title, image, content, actions, etc.)\n * @output onClick - Emits a CardClickEvent when the card or an action is clicked\n */\nexport class CardComponent implements OnInit {\n /**\n * Card configuration object.\n * @type {CardMetadata}\n * @property type - The card type (see CardType).\n * @property title - The card title.\n * @property image - The card image URL.\n * @property content - The card content.\n * @property actions - Array of action buttons (optional).\n * @property sections - Custom card sections (optional).\n * @property overtitle - Subtitle or overtitle (optional).\n */\n @Input()\n props: CardMetadata;\n\n /**\n * Event emitted when the card or an action is clicked.\n */\n @Output()\n onClick = new EventEmitter<CardClickEvent>();\n\n types = CardType;\n actionTypes = ToolbarActionType;\n sections = CardSection;\n\n constructor() {}\n\n ngOnInit() {}\n\n clickHandler(section: CardSection, token?: string) {\n this.onClick.emit({ section, token });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\nimport { IonCheckbox } from '@ionic/angular/standalone';\n\n@Component({\n selector: 'val-check-input',\n standalone: true,\n imports: [CommonModule, IonCheckbox],\n template: ` <ion-checkbox>I agree to the terms and conditions</ion-checkbox> `,\n styleUrls: ['./check-input.component.scss'],\n})\n/**\n * val-check-input\n *\n * A simple checkbox input for boolean values or agreements.\n *\n * @example\n * <val-check-input></val-check-input>\n */\nexport class CheckInputComponent implements OnInit {\n constructor() {}\n\n ngOnInit() {}\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonCheckbox, IonTextarea } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-comment-input',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, IonCheckbox, IonTextarea],\n template: `\n <ion-textarea [formControl]=\"props.control\" [counter]=\"true\" [maxlength]=\"props.range.max\"></ion-textarea>\n `,\n styleUrls: ['./comment-input.component.scss'],\n})\n/**\n * val-comment-input\n *\n * A textarea input for multi-line comments, integrated with Angular forms.\n *\n * @example\n * <val-comment-input [props]=\"{ control: myControl, range: { max: 200 } }\"></val-comment-input>\n *\n * @input props: InputMetadata - Configuration for the textarea (form control, range, etc.)\n */\nexport class CommentInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the textarea.\n * @property range - The range object with max length.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { IonSpinner, IonText } from '@ionic/angular/standalone';\nimport { ContentLoaderMetadata } from './types';\n\n@Component({\n selector: 'val-content-loader',\n standalone: true,\n imports: [CommonModule, IonSpinner, IonText],\n template: `\n <div [ngClass]=\"['spinner-wrapper', props.size]\">\n <ion-spinner [ngClass]=\"[props.size]\" [name]=\"props.name\" [color]=\"props.color\"></ion-spinner>\n <ion-text [color]=\"props.color\">\n <p>{{ props.text }}</p>\n </ion-text>\n </div>\n `,\n styleUrls: ['./content-loader.component.scss'],\n})\n/**\n * val-content-loader\n *\n * A loading spinner with optional text, for indicating loading states.\n *\n * @example\n * <val-content-loader [props]=\"{ size: 'large', color: 'primary', text: 'Loading...' }\"></val-content-loader>\n *\n * @input props: ContentLoaderMetadata - Configuration for the loader (size, color, text, etc.)\n */\nexport class ContentLoaderComponent implements OnInit {\n /**\n * Loader configuration object.\n * @type {ContentLoaderMetadata}\n * @property size - The spinner size.\n * @property color - The spinner color.\n * @property text - The loading text (optional).\n * @property name - The spinner name (optional).\n */\n @Input()\n props: ContentLoaderMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","/**\n * Utilities for handling default values in form inputs based on InputMetadata configuration.\n */\n\nimport { InputMetadata, InputType } from '../../components/types';\n\n/**\n * Resolves the initial value for a form input based on its configuration.\n *\n * @param input - The input metadata configuration\n * @returns The resolved initial value\n *\n * @example\n * // Custom default value\n * const customValue = resolveInputDefaultValue({ withDefault: '2025-06-24', type: InputType.DATE });\n *\n * // Auto default value\n * const autoValue = resolveInputDefaultValue({ withDefault: true, type: InputType.NUMBER });\n *\n * // Explicit value (takes precedence)\n * const explicitValue = resolveInputDefaultValue({ value: 'explicit', withDefault: true, type: InputType.TEXT });\n */\nexport function resolveInputDefaultValue(input: InputMetadata): any {\n // Explicit value takes precedence\n if (input.value !== undefined && input.value !== null && input.value !== '') {\n return parseValueByType(input.value, input.type);\n }\n\n // No default configuration\n if (!input.withDefault) {\n return null;\n }\n\n // Custom default value\n if (typeof input.withDefault === 'string') {\n return parseValueByType(input.withDefault, input.type);\n }\n\n // Auto default value (withDefault === true)\n return getAutoDefaultValue(input.type);\n}\n\n/**\n * Parses a string value to the appropriate type based on the input type.\n *\n * @param value - The string value to parse\n * @param type - The input type\n * @returns The parsed value\n */\nfunction parseValueByType(value: string, type: InputType): any {\n switch (type) {\n case InputType.DATE:\n return new Date(value).toISOString();\n case InputType.NUMBER:\n return parseFloat(value) || 0;\n case InputType.CHECK:\n return value === 'true' || value === '1';\n case InputType.TEXT:\n case InputType.EMAIL:\n case InputType.PASSWORD:\n case InputType.COMMENT:\n case InputType.PIN_CODE:\n case InputType.HOUR:\n case InputType.RADIO:\n case InputType.SELECT:\n case InputType.SEARCH_SELECT:\n case InputType.FILE:\n default:\n return value;\n }\n}\n\n/**\n * Gets the automatic default value for a given input type.\n *\n * @param type - The input type\n * @returns The auto default value\n */\nfunction getAutoDefaultValue(type: InputType): any {\n switch (type) {\n case InputType.DATE:\n return new Date().toISOString();\n case InputType.NUMBER:\n return 0;\n case InputType.CHECK:\n return false;\n case InputType.TEXT:\n case InputType.EMAIL:\n case InputType.PASSWORD:\n case InputType.COMMENT:\n case InputType.PIN_CODE:\n case InputType.HOUR:\n case InputType.RADIO:\n case InputType.SELECT:\n case InputType.SEARCH_SELECT:\n case InputType.FILE:\n default:\n return '';\n }\n}\n\n/**\n * Applies the resolved default value to a FormControl.\n *\n * @param input - The input metadata configuration\n * @example\n * const input = { control: myFormControl, type: InputType.DATE, withDefault: true };\n * applyDefaultValueToControl(input);\n */\nexport function applyDefaultValueToControl(input: InputMetadata): void {\n if (!input.control) return;\n\n const defaultValue = resolveInputDefaultValue(input);\n if (defaultValue !== null) {\n input.control.setValue(defaultValue);\n input.control.markAsPristine();\n input.control.updateValueAndValidity();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonDatetime, IonDatetimeButton, IonModal } from '@ionic/angular/standalone';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-date-input',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, IonDatetime, IonDatetimeButton, IonModal],\n template: `\n <div class=\"button-container\">\n <ion-datetime-button class=\"action\" [datetime]=\"props.token\"></ion-datetime-button>\n </div>\n <ion-modal [keepContentsMounted]=\"true\">\n <ng-template>\n <ion-datetime\n [formControl]=\"props.control\"\n [id]=\"props.token\"\n presentation=\"date\"\n locale=\"es-ES\"\n [firstDayOfWeek]=\"1\"\n [showDefaultButtons]=\"true\"\n doneText=\"Aceptar\"\n cancelText=\"Cancelar\"\n formatOptions=\"{\n date: { dateStyle: 'medium' },\n time: { timeStyle: 'short' }\n }\"\n >\n <span slot=\"title\">{{ props.hint }}</span>\n </ion-datetime>\n </ng-template>\n </ion-modal>\n `,\n styleUrls: ['./date-input.component.scss'],\n})\n/**\n * val-date-input\n *\n * A date picker input integrated with Angular forms, using Ionic's datetime component.\n *\n * @example\n * <val-date-input [props]=\"{ control: myControl, hint: 'Select a date' }\"></val-date-input>\n *\n * @input props: InputMetadata - Configuration for the date input (form control, hint, etc.)\n */\nexport class DateInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the date input.\n * @property hint - The hint text for the input.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {\n // Apply default values on initialization\n if (this.props?.withDefault || this.props?.value) {\n applyDefaultValueToControl(this.props);\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonInput } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-email-input',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, IonInput],\n template: ` <ion-input [formControl]=\"props.control\" type=\"email\" [placeholder]=\"props.placeholder\"></ion-input> `,\n styleUrls: ['./email-input.component.scss'],\n})\n/**\n * val-email-input\n *\n * An email input field integrated with Angular forms.\n *\n * @example\n * <val-email-input [props]=\"{ control: myControl, placeholder: 'Enter your email' }\"></val-email-input>\n *\n * @input props: InputMetadata - Configuration for the input (form control, placeholder, etc.)\n */\nexport class EmailInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the input.\n * @property placeholder - The placeholder text.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","/**\n * Resolves a color string to a valid CSS value for use in styles.\n * Supports Ionic color names, CSS variables, and custom colors.\n *\n * @param color The color name, CSS variable, or custom color string\n * @returns A valid CSS color value\n *\n * @example\n * resolveColor('primary'); // returns 'var(--ion-color-primary)'\n * resolveColor('--my-custom-color'); // returns 'var(--my-custom-color)'\n * resolveColor('#ff0000'); // returns '#ff0000'\n */\nexport function resolveColor(color: string): string {\n // Si el color empieza con \"--\", se asume que es una variable CSS válida\n if (color.startsWith('--')) {\n return `var(${color})`;\n }\n\n // Lista de colores predefinidos de Ionic\n const ionicColors = [\n 'primary',\n 'secondary',\n 'tertiary',\n 'success',\n 'warning',\n 'danger',\n 'light',\n 'medium',\n 'dark',\n ];\n\n // Verificar si el color es un color de Ionic\n if (ionicColors.includes(color)) {\n return `var(--ion-color-${color})`;\n }\n\n // Si no es una variable CSS ni un color de Ionic, devolver el color tal cual\n return color;\n}\n","import { Component, inject, Input } from '@angular/core';\nimport { IonText } from '@ionic/angular/standalone';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { resolveColor } from '../../../shared/utils/styles';\nimport { ExpandableTextInput } from './types';\n\n@Component({\n selector: 'val-expandable-text',\n standalone: true,\n imports: [IonText],\n template: `\n <div class=\"description-container\" [class.expanded]=\"expanded\" [class.has-gradient]=\"!expanded && isTruncated\">\n <ion-text>\n <p class=\"description\">\n <span class=\"content\">{{ expanded ? props.content : truncatedText }}</span>\n @if (!expanded && isTruncated) {\n <span class=\"see-more\" [style.color]=\"this.color()\" (click)=\"toggleExpand()\">\n {{ getExpandText() }}\n </span>\n }\n </p>\n </ion-text>\n </div>\n `,\n styles: [\n `\n .description-container {\n position: relative;\n overflow: hidden;\n max-height: 10rem; /* Altura para texto truncado */\n transition: max-height 0.3s ease-in-out;\n }\n\n .description-container.expanded {\n max-height: none; /* Sin límite de altura al expandir */\n }\n\n .description {\n position: relative;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .description-container:not(.expanded) .description::after {\n content: '';\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 3.5rem; /* Altura del gradiente */\n background: linear-gradient(to top, var(--ion-background-color), rgba(255, 255, 255, 0));\n pointer-events: none; /* Ignorar interacciones en el gradiente */\n }\n\n .description-container:not(.has-gradient) .description::after {\n background: transparent; /* Fondo transparente si no hay gradiente */\n }\n\n .see-more {\n position: relative;\n font-weight: bold;\n cursor: pointer;\n z-index: 1;\n margin-left: 0.3rem;\n }\n `,\n ],\n})\n/**\n * val-expandable-text\n *\n * A text component that can be expanded/collapsed to show more or less content.\n *\n * @example\n * <val-expandable-text [props]=\"{ content: '...', limit: 180, color: 'primary', expandText: 'más' }\"></val-expandable-text>\n *\n * @input props: ExpandableTextInput - Configuration for the expandable text (content, limit, color, expandText)\n */\nexport class ExpandableTextComponent {\n /**\n * Expandable text configuration object.\n * @type {ExpandableTextInput}\n * @property content - The text content to display.\n * @property limit - The character limit before truncation.\n * @property color - The color for the \"see more\" link.\n * @property expandText - The text for the expand link (optional).\n */\n @Input() props: ExpandableTextInput;\n expanded = false;\n defaultColor = 'primary';\n\n private langService = inject(LangService);\n\n get truncatedText(): string {\n const maxLength = this.props.limit || 100; // Longitud por defecto\n return this.props.content?.length > maxLength ? this.props.content.slice(0, maxLength) + '...' : this.props.content;\n }\n\n get isTruncated(): boolean {\n return this.props.content?.length > (this.props.limit || 100);\n }\n\n getExpandText(): string {\n return this.props.expandText || this.langService.getText('_global', 'seeMore', 'ver más');\n }\n\n toggleExpand() {\n this.expanded = !this.expanded;\n }\n\n color() {\n return resolveColor(this.props.color || this.defaultColor);\n }\n}\n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { IonIcon } from '@ionic/angular/standalone';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { PrimarySolidDefaultRoundButton } from '../../atoms/button/factory';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { ButtonMetadata, InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-file-input',\n standalone: true,\n imports: [IonIcon, TextComponent, ButtonComponent],\n template: `\n <div class=\"file-container\">\n <input style=\"display: none\" type=\"file\" (change)=\"onFileSelected($event)\" #fileInput />\n <div class=\"name-container\">\n <ion-icon [name]=\"selectedFile ? 'checkmark-circle-outline' : 'alert-circle-outline'\"></ion-icon>\n <val-text\n style=\"margin-left: 4px;\"\n [props]=\"{\n content: selectedFile ? selectedFile.name : 'No has seleccionado archivo',\n color: 'dark',\n bold: false,\n size: 'medium',\n }\"\n ></val-text>\n </div>\n <val-button [props]=\"contrastButton\" (onClick)=\"fileInput.click()\"></val-button>\n </div>\n `,\n styleUrls: ['./file-input.component.scss'],\n})\n/**\n * val-file-input\n *\n * A file input component for uploading files, integrated with Angular forms.\n *\n * @example\n * <val-file-input [props]=\"{ control: myControl }\"></val-file-input>\n *\n * @input props: InputMetadata - Configuration for the file input (form control, etc.)\n */\nexport class FileInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the file input.\n */\n @Input() props: InputMetadata;\n\n @ViewChild('fileInput') fileInput;\n\n contrastButton: ButtonMetadata = {\n ...PrimarySolidDefaultRoundButton('Subir archivo'),\n color: 'light',\n };\n selectedFile: File;\n\n constructor() {}\n\n ngOnInit() {}\n\n onFileSelected(event): void {\n this.selectedFile = event.target.files[0];\n this.props.control.setValue(this.selectedFile);\n }\n\n reset(): void {\n this.selectedFile = null;\n this.fileInput.nativeElement.value = '';\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-hint',\n standalone: true,\n imports: [CommonModule, TextComponent],\n template: `\n <div class=\"hint-container\" *ngIf=\"shouldShowErrors\">\n <val-text\n *ngFor=\"let e of Errors\"\n [props]=\"{\n content: e,\n color: 'danger',\n bold: false,\n size: 'small',\n }\"\n ></val-text>\n </div>\n `,\n styleUrls: ['./hint.component.scss'],\n})\n/**\n * val-hint\n *\n * Displays validation error messages for a form input, using Angular forms.\n *\n * @example\n * <val-hint [props]=\"{ control: myControl, errors: { required: 'Required field' } }\"></val-hint>\n *\n * @input props: InputMetadata - Configuration for the input (form control, errors, etc.)\n */\nexport class HintComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the input.\n * @property errors - The error messages mapping.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n\n get shouldShowErrors(): boolean {\n if (this.props.control) {\n // Normal field with single control\n return this.props.control.invalid && (this.props.control.touched || this.props.control.dirty);\n } else if (this.props.fromControl && this.props.toControl) {\n // NUMBER_FROM_TO field with separate controls\n const fromInvalid =\n this.props.fromControl.invalid && (this.props.fromControl.touched || this.props.fromControl.dirty);\n const toInvalid = this.props.toControl.invalid && (this.props.toControl.touched || this.props.toControl.dirty);\n return fromInvalid || toInvalid;\n }\n return false;\n }\n\n get Errors(): string[] {\n const keys = Object.keys(this.props.errors || {});\n const errors = [];\n\n keys.map((e: string) => {\n if (this.props.control && this.props.control.hasError(e)) {\n // Normal field\n errors.push(this.props.errors[e]);\n } else if (this.props.fromControl && this.props.toControl) {\n // NUMBER_FROM_TO field - check both controls\n const fromLabel = this.props.fromLabel || 'Inicial';\n const toLabel = this.props.toLabel || 'Final';\n\n if (this.props.fromControl.hasError(e)) {\n errors.push(`${fromLabel}: ${this.props.errors[e]}`);\n }\n if (this.props.toControl.hasError(e)) {\n errors.push(`${toLabel}: ${this.props.errors[e]}`);\n }\n }\n });\n\n return errors;\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonDatetime } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-hour-input',\n standalone: true,\n imports: [ReactiveFormsModule, IonDatetime],\n template: ` <ion-datetime [formControl]=\"props.control\" presentation=\"time\"></ion-datetime>`,\n styleUrls: ['./hour-input.component.scss'],\n})\n/**\n * val-hour-input\n *\n * A time picker input integrated with Angular forms, using Ionic's datetime component.\n *\n * @example\n * <val-hour-input [props]=\"{ control: myControl }\"></val-hour-input>\n *\n * @input props: InputMetadata - Configuration for the time input (form control, etc.)\n */\nexport class HourInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the time input.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { IonButton, IonIcon, IonLabel, IonSelect, IonSelectOption } from '@ionic/angular/standalone';\nimport { addIcons } from 'ionicons';\nimport { chevronDown } from 'ionicons/icons';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { PopoverSelectorMetadata } from './types';\n\n@Component({\n selector: 'val-popover-selector',\n standalone: true,\n imports: [CommonModule, IonButton, IonIcon, IonSelect, IonSelectOption, IonLabel],\n template: `\n <div class=\"popover-selector-container\">\n <ion-label *ngIf=\"props.label\" class=\"selector-label\">{{ props.label }}</ion-label>\n <ion-select\n [value]=\"props.selectedValue\"\n [placeholder]=\"getPlaceholderText()\"\n [interface]=\"props.interface || 'popover'\"\n [multiple]=\"props.multiple || false\"\n [disabled]=\"props.disabled || false\"\n [cancelText]=\"getCancelText()\"\n [okText]=\"getOkText()\"\n (ionChange)=\"onSelectionChange($event)\"\n class=\"popover-selector-select\"\n >\n <ion-button\n slot=\"trigger\"\n [fill]=\"props.fill || 'clear'\"\n [size]=\"props.size || 'default'\"\n [shape]=\"'round'\"\n [color]=\"props.color || 'medium'\"\n [disabled]=\"props.disabled || false\"\n class=\"selector-trigger\"\n >\n <ion-icon *ngIf=\"props.icon\" [name]=\"props.icon\" slot=\"start\"> </ion-icon>\n\n <span class=\"trigger-text\">{{ getDisplayText() }}</span>\n\n <ion-icon name=\"chevron-down-outline\" slot=\"end\" class=\"chevron-icon\"> </ion-icon>\n </ion-button>\n\n <ion-select-option *ngFor=\"let option of props.options\" [value]=\"option.value\" [disabled]=\"option.disabled\">\n <div class=\"option-content\">\n <ion-icon *ngIf=\"option.icon\" [name]=\"option.icon\" class=\"option-icon\"> </ion-icon>\n <span>{{ option.label }}</span>\n </div>\n </ion-select-option>\n </ion-select>\n </div>\n `,\n styleUrls: ['./popover-selector.component.scss'],\n})\n/**\n * val-popover-selector\n *\n * A generic reusable popover selector component that can be used for any type of selection.\n * Provides a button trigger that opens a popover with selectable options.\n *\n * @example\n * // Basic usage\n * <val-popover-selector\n * [props]=\"selectorProps\"\n * (selectionChange)=\"onSelectionChange($event)\">\n * </val-popover-selector>\n *\n * @example\n * // With icon and custom styling\n * const selectorProps: PopoverSelectorMetadata = {\n * options: [\n * { value: 'option1', label: 'Option 1', icon: 'star' },\n * { value: 'option2', label: 'Option 2', icon: 'heart' }\n * ],\n * selectedValue: 'option1',\n * label: 'Choose option',\n * icon: 'settings',\n * color: 'primary',\n * size: 'large',\n * fill: 'solid'\n * };\n *\n * @input props: PopoverSelectorMetadata - Configuration for the selector\n * @output selectionChange: EventEmitter<string | string[]> - Emitted when selection changes\n */\nexport class PopoverSelectorComponent {\n /**\n * Popover selector configuration object.\n * @type {PopoverSelectorMetadata}\n */\n @Input()\n props: PopoverSelectorMetadata;\n\n /**\n * Event emitted when the selection changes.\n * Emits the selected value(s).\n */\n @Output()\n selectionChange = new EventEmitter<string | string[]>();\n\n private langService = inject(LangService);\n\n constructor() {\n // Register required icons\n addIcons({ chevronDown });\n }\n\n /**\n * Get reactive placeholder text.\n */\n getPlaceholderText(): string {\n return this.props.placeholder || this.langService.getText('_global', 'select', 'Seleccionar...');\n }\n\n /**\n * Get reactive cancel text.\n */\n getCancelText(): string {\n return this.props.cancelText || this.langService.getText('_global', 'cancel', 'Cancelar');\n }\n\n /**\n * Get reactive ok text.\n */\n getOkText(): string {\n return this.props.okText || this.langService.getText('_global', 'ok', 'Aceptar');\n }\n\n /**\n * Handle selection change from the ion-select.\n * @param event - The ion-select change event\n */\n onSelectionChange(event: any) {\n const selectedValue = event.detail.value;\n this.selectionChange.emit(selectedValue);\n }\n\n /**\n * Get the display text for the trigger button.\n * Shows the selected option's label or placeholder.\n * @returns The display text\n */\n getDisplayText(): string {\n if (!this.props.selectedValue) {\n return this.getPlaceholderText();\n }\n\n if (Array.isArray(this.props.selectedValue)) {\n // Multiple selection\n if (this.props.selectedValue.length === 0) {\n return this.getPlaceholderText();\n }\n if (this.props.selectedValue.length === 1) {\n const option = this.props.options.find(opt => opt.value === this.props.selectedValue[0]);\n return option?.label || this.props.selectedValue[0];\n }\n const selectedText = this.langService.getText('_global', 'selected', 'seleccionados');\n return `${this.props.selectedValue.length} ${selectedText}`;\n }\n\n // Single selection\n const selectedOption = this.props.options.find(opt => opt.value === this.props.selectedValue);\n return selectedOption?.label || this.props.selectedValue;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { addIcons } from 'ionicons';\nimport { globe, language } from 'ionicons/icons';\nimport { Observable, Subscription, combineLatest, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { LangOption } from '../../../services/lang-provider/types';\nimport { PopoverSelectorComponent } from '../popover-selector/popover-selector.component';\nimport { PopoverOption, PopoverSelectorMetadata } from '../popover-selector/types';\nimport { LanguageSelectorMetadata } from './types';\n\n@Component({\n selector: 'val-language-selector',\n standalone: true,\n imports: [CommonModule, PopoverSelectorComponent],\n template: `\n <val-popover-selector [props]=\"popoverProps\" (selectionChange)=\"onLanguageChange($event)\"> </val-popover-selector>\n `,\n styleUrls: ['./language-selector.component.scss'],\n})\n/**\n * val-language-selector\n *\n * A specialized language selector component that integrates with the LangService.\n * Uses the popover-selector component internally and provides language-specific functionality.\n *\n * @example\n * // Basic usage (auto-detects languages from LangService)\n * <val-language-selector\n * [props]=\"{ showLabel: true, showFlags: true }\">\n * </val-language-selector>\n *\n * @example\n * // Custom configuration\n * const languageProps: LanguageSelectorMetadata = {\n * showLabel: true,\n * label: 'Choose Language',\n * showFlags: true,\n * color: 'primary',\n * size: 'large',\n * fill: 'outline',\n * customLanguageNames: {\n * 'es': 'Español',\n * 'en': 'English',\n * 'fr': 'Français'\n * }\n * };\n *\n * @example\n * // With reactive content\n * const languageProps: LanguageSelectorMetadata = {\n * showLabel: true,\n * labelConfig: {\n * className: 'myComponent',\n * key: 'languageLabel',\n * fallback: 'Language'\n * },\n * color: 'tertiary'\n * };\n *\n * @input props: LanguageSelectorMetadata - Configuration for the language selector\n * @output languageChange: EventEmitter<string> - Emitted when language changes\n */\nexport class LanguageSelectorComponent implements OnInit, OnDestroy {\n /**\n * Language selector configuration object.\n * @type {LanguageSelectorMetadata}\n */\n @Input()\n props: LanguageSelectorMetadata = {};\n\n /**\n * Event emitted when the language selection changes.\n * Emits the selected language code.\n */\n @Output()\n languageChange = new EventEmitter<string>();\n\n /** Popover selector configuration */\n popoverProps: PopoverSelectorMetadata;\n\n /** Current language observable */\n currentLanguage$: Observable<LangOption>;\n\n /** Available languages observable */\n availableLanguages$: Observable<LangOption[]>;\n\n /** Label observable for reactive content */\n label$: Observable<string>;\n\n private subscriptions = new Subscription();\n\n /** Default language display names */\n private readonly defaultLanguageNames: Record<string, string> = {\n es: 'Español',\n en: 'English',\n fr: 'Français',\n de: 'Deutsch',\n pt: 'Português',\n it: 'Italiano',\n zh: '中文',\n ja: '日本語',\n ko: '한국어',\n ru: 'Русский',\n ar: 'العربية',\n };\n\n /** Default flag icons for languages */\n private readonly defaultLanguageFlags: Record<string, string> = {\n es: '🇪🇸',\n en: '🇺🇸',\n fr: '🇫🇷',\n de: '🇩🇪',\n pt: '🇵🇹',\n it: '🇮🇹',\n zh: '🇨🇳',\n ja: '🇯🇵',\n ko: '🇰🇷',\n ru: '🇷🇺',\n ar: '🇸🇦',\n };\n\n constructor(private langService: LangService) {\n // Register required icons\n addIcons({ language, globe });\n }\n\n ngOnInit() {\n this.initializeLanguageState();\n this.initializeLabel();\n this.initializePopoverProps();\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n\n private initializeLanguageState() {\n // Get current language and available languages from LangService\n this.currentLanguage$ = this.langService.currentLang$;\n this.availableLanguages$ = this.currentLanguage$.pipe(\n map(() => this.props.availableLanguages || this.langService.availableLangs)\n );\n }\n\n private initializeLabel() {\n // Initialize label observable based on configuration\n if (this.props.label !== undefined) {\n // Static label\n this.label$ = of(this.props.label);\n } else if (this.props.labelConfig) {\n // Reactive label\n this.label$ = this.langService.getContent(\n this.props.labelConfig.className || '_global',\n this.props.labelConfig.key,\n this.props.labelConfig.fallback || 'Language'\n );\n } else {\n // Default label from global content\n this.label$ = this.langService.getContent('_global', 'language', 'Idioma');\n }\n }\n\n private initializePopoverProps() {\n // Subscribe to language state changes and content changes to update popover props\n const languageSubscription = combineLatest([\n this.availableLanguages$,\n this.currentLanguage$,\n this.langService.currentLang$, // This will trigger updates when language changes\n ]).subscribe(([availableLanguages, currentLanguage]) => {\n this.updatePopoverProps(availableLanguages, currentLanguage);\n });\n this.subscriptions.add(languageSubscription);\n\n // Subscribe to label changes\n const labelSubscription = this.label$.subscribe(label => {\n if (this.popoverProps) {\n this.popoverProps = {\n ...this.popoverProps,\n label: this.props.showLabel !== false ? label : undefined,\n };\n }\n });\n this.subscriptions.add(labelSubscription);\n }\n\n private updatePopoverProps(availableLanguages: LangOption[], currentLanguage: LangOption) {\n // Convert language codes to popover options\n const options: PopoverOption[] = availableLanguages.map(lang => ({\n value: lang,\n label: this.getLanguageDisplayName(lang),\n icon: this.props.showFlags ? undefined : undefined, // We'll use text flags instead\n }));\n\n // Create popover configuration\n this.popoverProps = {\n options,\n selectedValue: currentLanguage,\n label: this.props.showLabel !== false ? '' : undefined, // Will be set by label subscription\n icon: 'language',\n placeholder: this.langService.getText('_global', 'selectLanguage', 'Seleccionar idioma...'),\n color: this.props.color || 'medium',\n size: this.props.size || 'default',\n fill: this.props.fill || 'outline',\n shape: this.props.shape,\n expand: this.props.expand,\n disabled: this.props.disabled || false,\n interface: 'popover',\n showCheckmark: true,\n multiple: false,\n cancelText: 'Cancelar',\n okText: 'Aceptar',\n };\n }\n\n private getLanguageDisplayName(languageCode: string): string {\n // Use custom names if provided\n if (this.props.customLanguageNames?.[languageCode]) {\n const customName = this.props.customLanguageNames[languageCode];\n const flag = this.props.showFlags ? this.defaultLanguageFlags[languageCode] : '';\n return flag ? `${flag} ${customName}` : customName;\n }\n\n // Use reactive content for translated language names\n // Note: This will use the current language since getLanguageDisplayName is called during subscription updates\n const translatedName = this.langService.getText('_global', `languageName_${languageCode}`);\n const flag = this.props.showFlags ? this.defaultLanguageFlags[languageCode] : '';\n\n if (translatedName && translatedName !== `languageName_${languageCode}`) {\n return flag ? `${flag} ${translatedName}` : translatedName;\n }\n\n // Fallback to default names, then to code\n const defaultName = this.defaultLanguageNames[languageCode] || languageCode.toUpperCase();\n return flag ? `${flag} ${defaultName}` : defaultName;\n }\n\n /**\n * Handle language selection change.\n * @param selectedLanguage - The selected language code(s)\n */\n onLanguageChange(selectedLanguage: string | string[]) {\n if (typeof selectedLanguage === 'string') {\n // Update the language service\n this.langService.setLang(selectedLanguage);\n\n // Emit the change event\n this.languageChange.emit(selectedLanguage);\n }\n }\n}\n","/**\n * Service for managing application themes (light, dark, auto).\n * Handles user preferences, system theme detection, and theme toggling.\n * Uses localStorage to persist the selected theme.\n */\n\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { THEME } from '../shared/constants/storage';\nimport { LocalStorageService } from './local-storage.service';\n\nexport enum ThemeOption {\n LIGHT = 'light',\n DARK = 'dark',\n AUTO = 'auto',\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThemeService {\n /**\n * Indicates if the light theme is active.\n */\n lightToggle = false;\n /**\n * Indicates if the dark theme is active.\n */\n darkToggle = false;\n /**\n * Indicates if the auto theme is active.\n */\n autoToggle = false;\n /**\n * The current selected theme option.\n */\n currentOption = ThemeOption.AUTO;\n /**\n * Enum with all available theme options.\n */\n themeOptions = ThemeOption;\n /**\n * Whether the system prefers dark mode.\n */\n prefersDark = false;\n /**\n * The default theme option.\n */\n default = ThemeOption.AUTO;\n /**\n * Observable for the current theme.\n */\n theme: BehaviorSubject<ThemeOption>;\n\n constructor() {\n const current = LocalStorageService.get<ThemeOption>(THEME);\n console.log('💡 ThemeConfig current::: ', current);\n this.theme = new BehaviorSubject<ThemeOption>(current || this.default);\n this.currentOption = this.Theme;\n console.log('💡 ThemeConfig this.currentOption::: ', this.currentOption);\n this.toggleUserPreference(this.currentOption);\n\n const prefersDarkQuery = window.matchMedia('(prefers-color-scheme: dark)');\n this.prefersDark = prefersDarkQuery.matches;\n this.handleAutoConfiguration();\n\n prefersDarkQuery.addEventListener('change', mediaQuery => {\n console.log('💡 ThemeConfig addEventListener change::: ', mediaQuery);\n this.prefersDark = mediaQuery.matches;\n this.handleAutoConfiguration();\n });\n }\n\n private handleAutoConfiguration() {\n if (this.prefersDark && this.currentOption === ThemeOption.AUTO) {\n console.log('💡 ThemeConfig prefersDark::: ', this.prefersDark);\n this.toggleUserPreference(ThemeOption.AUTO);\n }\n if (!this.prefersDark && this.currentOption === ThemeOption.AUTO) {\n console.log('💡 ThemeConfig prefersDark::: ', this.prefersDark);\n this.toggleUserPreference(ThemeOption.AUTO);\n }\n }\n\n private handleDarkPreference() {\n this.toggleTheme(ThemeOption.DARK, true);\n this.toggleTheme(ThemeOption.LIGHT, false);\n }\n\n private handleLightPreference() {\n this.toggleTheme(ThemeOption.LIGHT, true);\n this.toggleTheme(ThemeOption.DARK, false);\n }\n\n /**\n * Returns true if the system prefers dark mode.\n */\n get IsDark(): boolean {\n return this.prefersDark;\n }\n\n /**\n * Gets the current theme option.\n */\n get Theme(): ThemeOption {\n return this.theme.value;\n }\n\n /**\n * Sets the current theme option and persists it.\n */\n set Theme(theme: ThemeOption) {\n this.theme.next(theme);\n LocalStorageService.set<ThemeOption>(THEME, theme);\n }\n\n /**\n * Toggles a theme class on the document body.\n * @param name The theme name\n * @param shouldAdd Whether to add or remove the class\n */\n toggleTheme(name: string, shouldAdd: boolean) {\n console.log('toggleTheme::: ', name, shouldAdd);\n document.body.classList.toggle(name, shouldAdd);\n }\n\n /**\n * Sets the user theme preference and updates toggles and theme classes.\n * @param option The selected theme option\n */\n toggleUserPreference(option: ThemeOption) {\n this.currentOption = option;\n this.Theme = option;\n this.lightToggle = option === ThemeOption.LIGHT;\n this.darkToggle = option === ThemeOption.DARK;\n this.autoToggle = option === ThemeOption.AUTO;\n\n switch (option) {\n case ThemeOption.LIGHT:\n this.handleLightPreference();\n break;\n case ThemeOption.DARK:\n this.handleDarkPreference();\n break;\n case ThemeOption.AUTO:\n if (this.prefersDark) {\n this.handleDarkPreference();\n } else {\n this.handleLightPreference();\n }\n break;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { DisplayComponent } from '../../atoms/display/display.component';\nimport { TitleComponent } from '../../atoms/title/title.component';\nimport { TitleBlockMetada } from './types';\n\n@Component({\n selector: 'val-title-block',\n standalone: true,\n imports: [CommonModule, TitleComponent, DisplayComponent],\n template: `\n <div [ngClass]=\"['titles-container', props.position]\">\n <val-title\n *ngIf=\"props.aboveTitle\"\n [props]=\"{\n content: props.aboveTitle.content | uppercase,\n color: props.aboveTitle.color,\n bold: false,\n size: props.aboveTitle.size,\n }\"\n ></val-title>\n <val-display\n *ngIf=\"props.title\"\n [props]=\"{\n content: props.title.content,\n color: props.title.color,\n size: props.title.size,\n }\"\n ></val-display>\n <val-title\n style=\"margin-top: 16px;\"\n *ngIf=\"props.bellowTitle\"\n [props]=\"{\n content: props.bellowTitle.content,\n color: props.bellowTitle.color,\n bold: false,\n size: props.bellowTitle.size,\n thin: props.bellowTitle.thin,\n }\"\n ></val-title>\n </div>\n `,\n styleUrls: ['./title-block.component.scss'],\n})\n/**\n * val-title-block\n *\n * Displays a block of titles (above, main, below) with configurable styles and positions.\n *\n * @example\n * <val-title-block [props]=\"{ title: {...}, aboveTitle: {...}, bellowTitle: {...}, position: 'center' }\"></val-title-block>\n *\n * @input props: TitleBlockMetada - Configuration for the title block (title, aboveTitle, bellowTitle, position)\n */\nexport class TitleBlockComponent implements OnInit, OnChanges {\n @Input()\n props: TitleBlockMetada;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n // Forzar detección de cambios múltiple\n this.cdr.detectChanges();\n setTimeout(() => {\n this.cdr.detectChanges();\n }, 0);\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, Input } from '@angular/core';\nimport { ThemeService } from '../../../services/theme.service';\nimport { resolveColor } from '../../../shared/utils/styles';\nimport { ButtonGroupComponent } from '../button-group/button-group.component';\nimport { TitleBlockComponent } from '../title-block/title-block.component';\nimport { LayeredCardMetadata } from './types';\n\n@Component({\n selector: 'layered-card',\n standalone: true,\n imports: [CommonModule, ButtonGroupComponent, TitleBlockComponent],\n template: `\n <div\n class=\"fun-card\"\n [class.big-space]=\"props.bigSpace\"\n [class.hoverable]=\"props.hoverable\"\n [class.layered]=\"props.mode === 'layered'\"\n [class.poster]=\"props.mode === 'poster'\"\n [ngStyle]=\"{\n background: theme.IsDark ? 'var(--ion-background-color)' : color(props.background),\n minHeight: props.withMin ? '340px' : 'auto',\n }\"\n >\n @if (props.mode === 'poster') {\n <img\n class=\"poster-image\"\n [class.dark]=\"props.dark\"\n [class.with-opacity]=\"props.withOpacity\"\n alt=\"image\"\n [src]=\"props.image\"\n />\n }\n @if (props.mode === 'layered') {\n <img\n class=\"layer-image\"\n [class.dark]=\"props.dark\"\n [class.with-opacity]=\"props.withOpacity\"\n alt=\"image\"\n [src]=\"props.image\"\n />\n }\n\n <section>\n <val-title-block [props]=\"props.content\" />\n @if (props.actions) {\n <val-button-group style=\"display:block; margin-top: 16px;\" [props]=\"props.actions\" />\n }\n </section>\n </div>\n `,\n styleUrl: './layered-card.component.scss',\n})\nexport class LayeredCardComponent {\n theme = inject(ThemeService);\n\n @Input()\n props: LayeredCardMetadata;\n\n color(background) {\n if (!background) {\n return '';\n }\n return resolveColor(background);\n }\n}\n","import { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\nimport { IonButton, IonIcon, IonText } from '@ionic/angular/standalone';\nimport { addIcons } from 'ionicons';\nimport { chevronForwardOutline } from 'ionicons/icons';\nimport { NavigationService } from '../../../services/navigation.service';\nimport { LinkMetadata } from './types';\n\n@Component({\n selector: 'val-link',\n standalone: true,\n imports: [IonButton, IonIcon, IonText],\n template: `\n <div>\n <ion-button type=\"button\" [color]=\"props.color\" fill=\"clear\" [size]=\"props.size\" (click)=\"onClickHandler()\">\n <ion-icon slot=\"end\" name=\"chevron-forward-outline\"></ion-icon>\n <ion-text>{{ props.text }}</ion-text>\n </ion-button>\n </div>\n `,\n styleUrls: ['./link.component.scss'],\n})\n/**\n * val-link\n *\n * A stylized link button with navigation support for internal, in-app, or new tab links.\n *\n * @example\n * <val-link [props]=\"{ text: 'Go', color: 'primary', link: '/home', type: 'internal' }\" (onClick)=\"handler($event)\"></val-link>\n *\n * @input props: LinkMetadata - Configuration for the link (text, color, link, type, etc.)\n * @output onClick - Emits the token of the clicked link\n */\nexport class LinkComponent implements OnInit {\n /**\n * Link configuration object.\n * @type {LinkMetadata}\n * @property text - The link text.\n * @property color - The button color (Ionic color string).\n * @property link - The URL or route to navigate to.\n * @property type - The navigation type ('internal', 'browse', 'tab').\n * @property token - Optional token for event identification.\n * @property size - The button size (optional).\n */\n @Input()\n props: LinkMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n service = inject(NavigationService);\n\n constructor() {\n addIcons({ chevronForwardOutline });\n }\n\n ngOnInit() {}\n\n onClickHandler() {\n this.onClick.emit(this.props.token);\n\n switch (this.props.type) {\n case 'internal':\n this.service.navigateByUrl(this.props.link);\n break;\n case 'browse':\n this.service.navigateInApp(this.props.link);\n break;\n case 'tab':\n this.service.openInNewTab(this.props.link);\n break;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { HrefComponent } from '../../atoms/href/href.component';\nimport { TitleComponent } from '../../atoms/title/title.component';\nimport { LinkCakeMetadata } from './types';\n\n@Component({\n selector: 'val-links-cake',\n standalone: true,\n imports: [CommonModule, TitleComponent, HrefComponent],\n template: `\n <div>\n @if (props.title) {\n <div class=\"title\">\n <val-title [props]=\"{ content: props.title, color: 'dark', bold: false, size: props.size }\"></val-title>\n </div>\n }\n <div class=\"link\" *ngFor=\"let l of props.links\">\n <val-href [props]=\"l\"></val-href>\n </div>\n </div>\n `,\n styleUrls: ['./links-cake.component.scss'],\n})\n/**\n * val-links-cake\n *\n * Displays a list of links with an optional title, styled as a \"cake\" of links.\n *\n * @example\n * <val-links-cake [props]=\"{ title: 'Links', links: [...], size: 'medium' }\"></val-links-cake>\n *\n * @input props: LinkCakeMetadata - Configuration for the links cake (title, links, size)\n */\nexport class LinksCakeComponent implements OnInit {\n /**\n * Links cake configuration object.\n * @type {LinkCakeMetadata}\n * @property title - The title for the links section (optional).\n * @property links - Array of link configurations.\n * @property size - The size of the title and links.\n */\n @Input()\n props: LinkCakeMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { BoxComponent } from '../../atoms/box/box.component';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { NotesBoxMetadata } from './types';\n\n@Component({\n selector: 'val-notes-box',\n standalone: true,\n imports: [CommonModule, BoxComponent, TextComponent],\n template: `\n <val-box\n [props]=\"{\n icon: '',\n bordered: false,\n color: props.color,\n leftBorder: true,\n rounded: props.rounded,\n padding: props.padding,\n }\"\n >\n <div [ngClass]=\"['content-container', props.size]\" body>\n @if (props.prefix) {\n <val-text\n [props]=\"{ content: props.prefix, color: props.textColor, bold: true, size: props.size }\"\n ></val-text>\n }\n <val-text [props]=\"{ content: props.text, color: props.textColor, bold: false, size: props.size }\"></val-text>\n </div>\n </val-box>\n `,\n styleUrls: ['./notes-box.component.scss'],\n})\n/**\n * val-notes-box\n *\n * Displays a styled notes/info box with optional prefix and configurable color, size, and padding.\n *\n * @example\n * <val-notes-box [props]=\"{ text: 'Note', prefix: 'Info', color: 'primary', textColor: 'dark', size: 'medium', rounded: true, padding: '8px' }\"></val-notes-box>\n *\n * @input props: NotesBoxMetadata - Configuration for the notes box (text, prefix, color, textColor, size, rounded, padding)\n */\nexport class NotesBoxComponent implements OnInit {\n /**\n * Notes box configuration object.\n * @type {NotesBoxMetadata}\n * @property text - The main text content.\n * @property prefix - Optional prefix text (bold).\n * @property color - The background color of the box.\n * @property textColor - The color of the text.\n * @property size - The size of the text and box.\n * @property rounded - Whether the box has rounded corners.\n * @property padding - Custom padding for the box.\n */\n @Input()\n props: NotesBoxMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonInput } from '@ionic/angular/standalone';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-number-input',\n standalone: true,\n imports: [ReactiveFormsModule, IonInput],\n template: ` <ion-input [formControl]=\"props.control\" type=\"number\" [placeholder]=\"props.placeholder\"></ion-input> `,\n styleUrls: ['./number-input.component.scss'],\n})\n/**\n * val-number-input\n *\n * A number input field integrated with Angular forms.\n *\n * @example\n * <val-number-input [props]=\"{ control: myControl, placeholder: 'Enter a number' }\"></val-number-input>\n *\n * @input props: InputMetadata - Configuration for the input (form control, placeholder, etc.)\n */\nexport class NumberInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the input.\n * @property placeholder - The placeholder text.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {\n // Apply default values on initialization\n if (this.props?.withDefault || this.props?.value) {\n applyDefaultValueToControl(this.props);\n }\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { IonInput, IonLabel } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-number-from-to',\n standalone: true,\n imports: [ReactiveFormsModule, IonInput, IonLabel],\n template: `\n <div class=\"number-from-to-container\">\n <ion-label position=\"stacked\">{{ props.fromLabel || 'Inicial' }}</ion-label>\n <ion-input\n [formControl]=\"fromControl\"\n type=\"number\"\n [placeholder]=\"props.fromPlaceholder || props.placeholder\"\n [min]=\"props.range?.min\"\n [max]=\"props.range?.max\"\n >\n </ion-input>\n\n <ion-label position=\"stacked\">{{ props.toLabel || 'Final' }}</ion-label>\n <ion-input\n [formControl]=\"toControl\"\n type=\"number\"\n [placeholder]=\"props.toPlaceholder || props.placeholder\"\n [min]=\"props.range?.min\"\n [max]=\"props.range?.max\"\n >\n </ion-input>\n </div>\n `,\n styleUrls: ['./number-from-to.component.scss'],\n})\nexport class NumberFromToComponent implements OnInit {\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {\n // Apply default values if configured\n if (this.props?.withDefault || this.props?.value) {\n this.applyDefaultValues();\n }\n }\n\n private applyDefaultValues() {\n const defaultValue = this.resolveDefaultValue();\n if (defaultValue !== null) {\n if (typeof defaultValue === 'object' && defaultValue.from !== undefined) {\n this.fromControl?.setValue(defaultValue.from);\n this.toControl?.setValue(defaultValue.to);\n } else {\n // Si es un valor simple, aplicarlo a ambos controles\n this.fromControl?.setValue(defaultValue);\n this.toControl?.setValue(defaultValue);\n }\n this.fromControl?.markAsPristine();\n this.toControl?.markAsPristine();\n this.fromControl?.updateValueAndValidity();\n this.toControl?.updateValueAndValidity();\n }\n }\n\n private resolveDefaultValue(): any {\n // Explicit value takes precedence\n if (this.props.value !== undefined && this.props.value !== null && this.props.value !== '') {\n return this.parseValue(this.props.value);\n }\n\n // No default configuration\n if (!this.props.withDefault) {\n return null;\n }\n\n // Custom default value\n if (typeof this.props.withDefault === 'string') {\n return this.parseValue(this.props.withDefault);\n }\n\n // Auto default value (withDefault === true)\n return { from: 0, to: 0 };\n }\n\n private parseValue(value: string): any {\n try {\n // Try to parse as JSON first (for object values)\n return JSON.parse(value);\n } catch {\n // If not JSON, treat as number\n const numValue = parseFloat(value) || 0;\n return { from: numValue, to: numValue };\n }\n }\n\n get fromControl(): FormControl {\n return this.props.fromControl;\n }\n\n get toControl(): FormControl {\n return this.props.toControl;\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonButton, IonIcon, IonInput } from '@ionic/angular/standalone';\nimport { IconService } from '../../../services/icons.service';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-password-input',\n standalone: true,\n imports: [ReactiveFormsModule, IonInput, IonButton, IonIcon],\n template: `\n <div class=\"input-container\">\n <ion-input\n class=\"sign-in__input-password\"\n [formControl]=\"props.control\"\n [type]=\"hidePassword ? 'password' : 'text'\"\n [placeholder]=\"props.placeholder\"\n ></ion-input>\n <ion-button color=\"dark\" fill=\"clear\" (click)=\"hidePassword = !hidePassword\" size=\"small\">\n <ion-icon slot=\"icon-only\" [name]=\"hidePassword ? 'eye-off-outline' : 'eye-outline'\"></ion-icon>\n </ion-button>\n </div>\n `,\n styleUrls: ['./password-input.component.scss'],\n})\n/**\n * val-password-input\n *\n * A password input field with show/hide toggle, integrated with Angular forms.\n *\n * @example\n * <val-password-input [props]=\"{ control: myControl, placeholder: 'Enter password' }\"></val-password-input>\n *\n * @input props: InputMetadata - Configuration for the input (form control, placeholder, etc.)\n */\nexport class PasswordInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the input.\n * @property placeholder - The placeholder text.\n */\n @Input() props: InputMetadata;\n\n hidePassword = true;\n\n constructor(icon: IconService) {}\n\n ngOnInit() {}\n}\n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { NgOtpInputComponent, NgOtpInputConfig, NgOtpInputModule } from 'ng-otp-input';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-pin-input',\n standalone: true,\n imports: [NgOtpInputModule],\n template: `\n <div class=\"otp\">\n <ng-otp-input [formCtrl]=\"props.control\" [config]=\"otpInputConfig\"></ng-otp-input>\n </div>\n `,\n styleUrls: ['./pin-input.component.scss'],\n})\n/**\n * val-pin-input\n *\n * A PIN code input using ng-otp-input, integrated with Angular forms.\n *\n * @example\n * <val-pin-input [props]=\"{ control: myControl }\"></val-pin-input>\n *\n * @input props: InputMetadata - Configuration for the PIN input (form control, etc.)\n */\nexport class PinInputComponent implements OnInit {\n @ViewChild(NgOtpInputComponent, { static: false }) pinCode: NgOtpInputComponent | undefined;\n\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the PIN input.\n */\n @Input() props: InputMetadata;\n\n codeLength = 5;\n otpInputConfig: NgOtpInputConfig = {\n inputStyles: {\n 'font-size': '32px',\n width: '58px',\n height: '60px',\n },\n inputClass: 'otp-input-box',\n length: this.codeLength,\n allowNumbersOnly: true,\n };\n\n constructor() {}\n\n ngOnInit() {}\n\n reset() {\n if (this.pinCode) {\n this.pinCode.setValue('');\n }\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ProgressBarComponent } from '../../atoms/progress-bar/progress-bar.component';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { TitleBlockComponent } from '../title-block/title-block.component';\nimport { ProgressStatusMetadata } from './types';\n\n//TODO: support automatic or manual interval for messages. Include the interval number as a parameter.\n@Component({\n selector: 'val-progress-status',\n standalone: true,\n imports: [TitleBlockComponent, ProgressBarComponent, TextComponent],\n template: `\n <div class=\"status-container\">\n <div class=\"title-container\">\n <val-title-block\n [props]=\"{\n position: 'center',\n aboveTitle: props.titles.aboveTitle,\n title: props.titles.title,\n bellowTitle: props.titles.bellowTitle,\n }\"\n ></val-title-block>\n </div>\n <div class=\"progress-bar-container\">\n <val-progress-bar\n [props]=\"{\n progress: props.progress,\n size: 'xlarge',\n color: props.color,\n rounded: true,\n type: 'determinate',\n buffer: 1,\n }\"\n ></val-progress-bar>\n </div>\n <div class=\"subtitle-container\">\n <div class=\"subtitle\" [class.blink]=\"blinking\">\n <val-text [props]=\"{ content: Content, color: 'medium', bold: false, size: props.size }\"></val-text>\n </div>\n </div>\n </div>\n `,\n styleUrls: ['./progress-status.component.scss'],\n})\n/**\n * val-progress-status\n *\n * Displays a progress bar with status messages and titles, useful for multi-step or loading processes.\n *\n * @example\n * <val-progress-status [props]=\"{ progress: 0.5, color: 'primary', size: 'medium', titles: {...}, messages: [...] }\"></val-progress-status>\n *\n * @input props: ProgressStatusMetadata - Configuration for the progress status (progress, color, size, titles, messages)\n */\nexport class ProgressStatusComponent implements OnInit {\n /**\n * Progress status configuration object.\n * @type {ProgressStatusMetadata}\n * @property progress - The progress value (0 to 1).\n * @property color - The color of the progress bar.\n * @property size - The size of the text and bar.\n * @property titles - Title block configuration.\n * @property messages - Array of status messages.\n */\n @Input()\n props: ProgressStatusMetadata;\n\n currentIndex = 0;\n blinking = false;\n\n constructor() {}\n\n ngOnInit() {\n setInterval(() => {\n this.blinking = !this.blinking;\n }, 1000);\n\n setInterval(() => {\n this.getNextMessage();\n }, 9000);\n }\n\n get Content(): string {\n return this.props.messages[this.currentIndex];\n }\n\n getNextMessage(): void {\n this.currentIndex = (this.currentIndex + 1) % this.props.messages.length;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { BoxComponent } from '../../atoms/box/box.component';\nimport { HrefComponent } from '../../atoms/href/href.component';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { ButtonGroupComponent } from '../button-group/button-group.component';\nimport { PrompterMetadata } from './types';\n\n@Component({\n selector: 'val-prompter',\n standalone: true,\n imports: [CommonModule, BoxComponent, ButtonGroupComponent, TextComponent, HrefComponent],\n template: `\n <val-box\n class=\"teleprompter-container\"\n [props]=\"{ icon: '', bordered: props.bordered, color: props.color, leftBorder: false, padding: props.padding }\"\n (onClick)=\"clickHandler()\"\n >\n <div class=\"container\" [class.teleprompter-content]=\"props.teleprompter\" body>\n <div>\n <val-text\n [props]=\"{\n content: props.content,\n color: '',\n bold: true,\n size: props.size,\n }\"\n ></val-text>\n </div>\n @if (props.buttons || props.hrefs) {\n <div class=\"actions-container\">\n <val-button-group\n class=\"buttons-container\"\n [props]=\"{ buttons: props.buttons, position: 'right', columned: false }\"\n (onClick)=\"clickHandler($event)\"\n ></val-button-group>\n <val-href\n class=\"link\"\n *ngFor=\"let l of props.hrefs\"\n [props]=\"l\"\n (onClick)=\"clickHandler($event)\"\n ></val-href>\n </div>\n }\n </div>\n </val-box>\n `,\n styleUrls: ['./prompter.component.scss'],\n})\n/**\n * val-prompter\n *\n * Displays a prompt/info box with text, actions (buttons/links), and custom styles.\n *\n * @example\n * <val-prompter [props]=\"{ content: 'Message', buttons: [...], hrefs: [...], color: 'primary', size: 'medium' }\"></val-prompter>\n *\n * @input props: PrompterMetadata - Configuration for the prompter (content, buttons, hrefs, color, size, etc.)\n * @output onClick - Emits when an action is clicked\n */\nexport class PrompterComponent implements OnInit {\n /**\n * Prompter configuration object.\n * @type {PrompterMetadata}\n * @property content - The main text content.\n * @property buttons - Array of button configurations (optional).\n * @property hrefs - Array of link configurations (optional).\n * @property color - The background color of the box.\n * @property size - The size of the text and box.\n * @property bordered - Whether the box has a border.\n * @property padding - Custom padding for the box.\n * @property teleprompter - Whether to use teleprompter style (optional).\n */\n @Input()\n props: PrompterMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor() {}\n\n ngOnInit() {}\n\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n}\n","import { NgFor } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonRadio, IonRadioGroup } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-radio-input',\n standalone: true,\n imports: [NgFor, ReactiveFormsModule, IonRadioGroup, IonRadio],\n template: `\n <ion-radio-group [allowEmptySelection]=\"true\" [formControl]=\"props.control\">\n <ng-container *ngFor=\"let o of props.options\">\n <ion-radio [value]=\"o.id\">{{ o.name }}</ion-radio>\n <br />\n </ng-container>\n </ion-radio-group>\n `,\n styleUrls: ['./radio-input.component.scss'],\n})\n/**\n * val-radio-input\n *\n * A radio group input for selecting one option, integrated with Angular forms.\n *\n * @example\n * <val-radio-input [props]=\"{ control: myControl, options: [{ id: '1', name: 'Option 1' }] }\"></val-radio-input>\n *\n * @input props: InputMetadata - Configuration for the radio input (form control, options, etc.)\n */\nexport class RadioInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the radio input.\n * @property options - The available options for the radio group.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","import { Component, Input, OnInit, OnDestroy, inject, Output, EventEmitter } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonRange, IonLabel } from '@ionic/angular/standalone';\nimport { CommonModule } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport { RangeInputMetadata, RangeValue } from './types';\nimport { ComponentStates } from '../../types';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\n\n@Component({\n selector: 'val-range-input',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, IonRange, IonLabel],\n template: `\n @if (displayLabel) {\n <ion-label>{{ displayLabel }}</ion-label>\n }\n <ion-range\n [formControl]=\"props.control\"\n [min]=\"props.min ?? 0\"\n [max]=\"props.max ?? 100\"\n [step]=\"props.step ?? 1\"\n [pin]=\"props.pin ?? false\"\n [pinFormatter]=\"props.pinFormatter || defaultPinFormatter\"\n [ticks]=\"props.ticks ?? false\"\n [snaps]=\"props.snaps ?? false\"\n [color]=\"props.color || 'primary'\"\n [disabled]=\"props.state === states.DISABLED || props.disabled\"\n [debounce]=\"props.debounce ?? 0\"\n [dualKnobs]=\"props.dualKnobs ?? false\"\n (ionChange)=\"onRangeChange($event)\"\n >\n @if (props.startLabel) {\n <ion-label slot=\"start\">{{ props.startLabel }}</ion-label>\n }\n @if (props.endLabel) {\n <ion-label slot=\"end\">{{ props.endLabel }}</ion-label>\n }\n </ion-range>\n `,\n styleUrls: ['./range-input.component.scss'],\n})\n/**\n * val-range-input\n *\n * A range/slider input for numeric values, integrated with Angular forms.\n * Supports single value or dual knobs for range selection.\n *\n * @example Single value\n * <val-range-input [props]=\"{\n * control: volumeControl,\n * min: 0,\n * max: 100,\n * step: 5,\n * pin: true,\n * label: 'Volume'\n * }\"></val-range-input>\n *\n * @example Dual knobs for price range\n * <val-range-input [props]=\"{\n * control: priceControl,\n * min: 0,\n * max: 1000,\n * dualKnobs: true,\n * pin: true,\n * pinFormatter: (v) => '$' + v,\n * startLabel: '$0',\n * endLabel: '$1000'\n * }\"></val-range-input>\n *\n * @input props: RangeInputMetadata - Configuration for the range input\n * @output rangeChange: RangeValue - Emits when the range value changes\n */\nexport class RangeInputComponent implements OnInit, OnDestroy {\n /**\n * Input configuration object.\n * @type {RangeInputMetadata}\n */\n @Input() props: RangeInputMetadata;\n\n /**\n * Emits the new value when the range changes.\n */\n @Output() rangeChange = new EventEmitter<number | RangeValue>();\n\n states = ComponentStates;\n displayLabel: string = '';\n\n private langService = inject(LangService);\n private subscription?: Subscription;\n\n defaultPinFormatter = (value: number): string => `${value}`;\n\n ngOnInit() {\n this.setupLabel();\n }\n\n ngOnDestroy() {\n this.subscription?.unsubscribe();\n }\n\n onRangeChange(event: CustomEvent): void {\n const value = event.detail.value;\n this.rangeChange.emit(value);\n\n // Update lower/upper controls if using dual knobs\n if (this.props.dualKnobs && typeof value === 'object') {\n if (this.props.lowerControl) {\n this.props.lowerControl.setValue(value.lower);\n }\n if (this.props.upperControl) {\n this.props.upperControl.setValue(value.upper);\n }\n }\n }\n\n private setupLabel(): void {\n if (this.props.label) {\n this.displayLabel = this.props.label;\n } else if (this.props.contentKey && this.props.contentClass) {\n this.subscription = this.langService\n .getContent(this.props.contentClass, this.props.contentKey, this.props.contentFallback)\n .subscribe((content) => {\n this.displayLabel = content;\n });\n } else if (this.props.contentFallback) {\n this.displayLabel = this.props.contentFallback;\n }\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { IonSearchbar } from '@ionic/angular/standalone';\n\n@Component({\n selector: 'val-searchbar',\n standalone: true,\n imports: [IonSearchbar],\n template: `\n <ion-searchbar\n mode=\"ios\"\n debounce=\"500\"\n placeholder=\"Búsqueda\"\n [disabled]=\"disabled\"\n showCancelButton=\"focus\"\n cancelButtonText=\"Cancelar\"\n (ionInput)=\"onSearch($event)\"\n (ionBlur)=\"onBlur()\"\n (ionFocus)=\"onFocus()\"\n >\n </ion-searchbar>\n `,\n styleUrls: ['./searchbar.component.scss'],\n})\n/**\n * val-searchbar\n *\n * A search bar component with debounce and event emitters for filtering, focus, and blur.\n *\n * @example\n * <val-searchbar (filterEvent)=\"onFilter($event)\" (focusEvent)=\"onFocus()\" (blurEvent)=\"onBlur()\"></val-searchbar>\n *\n * @input disabled - Whether the searchbar is disabled.\n * @output filterEvent - Emits the search term on input.\n * @output focusEvent - Emits when the searchbar gains focus.\n * @output blurEvent - Emits when the searchbar loses focus.\n */\nexport class SearchbarComponent {\n /**\n * Whether the searchbar is disabled.\n */\n @Input() disabled: boolean;\n\n /**\n * Emits the search term on input.\n */\n @Output() filterEvent = new EventEmitter<string>();\n\n /**\n * Emits when the searchbar gains focus.\n */\n @Output() focusEvent = new EventEmitter<void>();\n\n /**\n * Emits when the searchbar loses focus.\n */\n @Output() blurEvent = new EventEmitter<void>();\n\n constructor() {}\n\n onSearch($event: any) {\n const searchTerm = $event.detail.value;\n this.filterEvent.emit(searchTerm);\n }\n\n onFocus() {\n this.focusEvent.emit();\n }\n\n onBlur() {\n this.blurEvent.emit();\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { IonSelect, IonSelectOption } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-select-input',\n standalone: true,\n imports: [ReactiveFormsModule, IonSelect, IonSelectOption],\n template: `\n <ion-select\n [formControl]=\"props.control\"\n [label]=\"props.label\"\n [interfaceOptions]=\"customModalOptions\"\n interface=\"modal\"\n [placeholder]=\"[props.placeholder]\"\n cancelText=\"Cancelar\"\n okText=\"Ok\"\n >\n @for (o of props.options; track o.id) {\n <ion-select-option [value]=\"o.id\">{{ o.name }}</ion-select-option>\n }\n </ion-select>\n `,\n styleUrls: ['./select-input.component.scss'],\n})\n/**\n * val-select-input\n *\n * A select/dropdown input integrated with Angular forms, using Ionic's select component.\n *\n * @example\n * <val-select-input [props]=\"{ control: myControl, label: 'Choose', options: [{ id: '1', name: 'Option 1' }] }\"></val-select-input>\n *\n * @input props: InputMetadata - Configuration for the select input (form control, label, options, etc.)\n */\nexport class SearchSelectorComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the select input.\n * @property label - The label for the select.\n * @property options - The available options for the select.\n * @property placeholder - The placeholder text.\n */\n @Input() props: InputMetadata;\n\n customModalOptions = {\n header: 'Seleccione',\n breakpoints: [0, 0.6],\n initialBreakpoint: 0.6,\n };\n\n constructor() {}\n\n ngOnInit() {\n if (this.props?.withDefault || this.props?.value) {\n applyDefaultValueToControl(this.props);\n }\n this.customModalOptions.header = this.props.label;\n }\n}\n","/**\n * Removes diacritical marks (accents) from a string using Unicode normalization.\n * Useful for text search and comparison.\n *\n * @param text The input string\n * @returns The normalized string without diacritical marks\n *\n * @example\n * replaceSpecialChars('canción') // returns 'cancion'\n */\nexport const replaceSpecialChars = (text: string) =>\n text.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { IonicModule, IonModal } from '@ionic/angular';\nimport { Subscription } from 'rxjs';\nimport { IconService } from '../../../services/icons.service';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { replaceSpecialChars } from '../../../shared/utils/text';\nimport { InputMetadata, InputOption } from '../../types';\nimport { SearchbarComponent } from '../searchbar/searchbar.component';\n\n@Component({\n selector: 'val-select-search',\n standalone: true,\n imports: [CommonModule, IonicModule, FormsModule, SearchbarComponent, ReactiveFormsModule],\n template: `\n <ion-input\n type=\"text\"\n [value]=\"displayValue\"\n [placeholder]=\"props?.placeholder || placeholder\"\n readonly\n (mousedown)=\"preventDefaultBehavior($event)\"\n />\n\n <ion-input style=\"position: absolute;\" [formControl]=\"props.control\" type=\"hidden\"></ion-input>\n\n <ion-modal\n #modal\n trigger=\"open-modal\"\n [initialBreakpoint]=\"1\"\n [breakpoints]=\"[0, 0.5, 0.75, 1]\"\n (didDismiss)=\"cancelModal()\"\n >\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-title>{{ label }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"cancelModal()\">Cerrar</ion-button>\n </ion-buttons>\n </ion-toolbar>\n <ion-toolbar>\n <val-searchbar (filterEvent)=\"onFilter($event)\" (focusEvent)=\"onFocus()\" (blurEvent)=\"onBlur()\" />\n </ion-toolbar>\n </ion-header>\n <ion-content>\n <ion-list>\n <ion-item *ngFor=\"let item of filteredItems\" button (click)=\"selectItem(item)\" detail=\"false\">\n <ion-label>{{ item[labelProperty] }}</ion-label>\n <ion-icon *ngIf=\"isItemSelected(item)\" name=\"checkmark-outline\" slot=\"end\" color=\"primary\"></ion-icon>\n </ion-item>\n <ion-item *ngIf=\"filteredItems.length === 0\" lines=\"none\">\n <ion-label color=\"dark\">No se encontraron resultados</ion-label>\n </ion-item>\n </ion-list>\n </ion-content>\n </ng-template>\n </ion-modal>\n `,\n styles: [\n `\n ion-header {\n padding: 8px 8px 0px 8px;\n }\n `,\n ],\n})\n/**\n * val-select-search\n *\n * A searchable select/dropdown input with modal and filtering, integrated with Angular forms.\n *\n * @example\n * <val-select-search [props]=\"{ control: myControl, label: 'Choose', options: [{ id: '1', name: 'Option 1' }] }\"></val-select-search>\n *\n * @input props: InputMetadata - Configuration for the select input (form control, label, options, etc.)\n */\nexport class SelectSearchComponent implements OnChanges, OnDestroy {\n @ViewChild('modal') modal!: IonModal;\n\n @Input() label: string;\n @Input() labelProperty: string = 'name';\n @Input() valueProperty: string = 'id';\n @Input() multiple: boolean = false;\n @Input() placeholder: string;\n\n private langService = inject(LangService);\n\n constructor() {\n this.label = this.langService.getText('_global', 'select', 'Seleccionar');\n this.placeholder = this.langService.getText('_global', 'selectOption', 'Seleccione una opción');\n }\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the select input.\n * @property label - The label for the select.\n * @property options - The available options for the select.\n * @property placeholder - The placeholder text.\n */\n @Input() props: InputMetadata;\n\n icon = inject(IconService);\n private changeDetector = inject(ChangeDetectorRef);\n\n searchTerm: string = '';\n filteredItems: InputOption[] = [];\n selectedItems: InputOption[] = [];\n displayValue: string = '';\n\n private previousOptions: any[] = [];\n private isProcessingChanges = false;\n private valueChangesSubscription?: Subscription;\n\n ngOnInit() {\n this.applyDefaultValue();\n this.initializeItems();\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n this.subscribeToValueChanges();\n }\n\n ngOnDestroy() {\n // Limpiar suscripciones para evitar memory leaks\n if (this.valueChangesSubscription) {\n this.valueChangesSubscription.unsubscribe();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // Evitar bucles infinitos\n if (this.isProcessingChanges) {\n return;\n }\n\n // Cuando cambia props o props.options\n if (changes['props']) {\n try {\n this.isProcessingChanges = true;\n\n // Desuscribirse del antiguo control si existe\n if (this.valueChangesSubscription) {\n this.valueChangesSubscription.unsubscribe();\n }\n\n if (this.props?.options) {\n // Verificar si las opciones han cambiado realmente\n const optionsChanged = !this.areOptionsEqual(this.previousOptions, this.props.options);\n\n if (optionsChanged) {\n this.previousOptions = [...this.props.options];\n this.initializeItems();\n }\n }\n\n // Sincronizar con el nuevo control si existe\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n\n // Suscribirse al nuevo control\n this.subscribeToValueChanges();\n } finally {\n this.isProcessingChanges = false;\n }\n }\n }\n\n ionViewWillEnter(): void {\n if (this.isProcessingChanges) {\n return;\n }\n\n try {\n this.isProcessingChanges = true;\n this.initializeItems();\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n this.subscribeToValueChanges();\n } finally {\n this.isProcessingChanges = false;\n }\n }\n\n // Suscribirse a cambios en el FormControl\n private subscribeToValueChanges() {\n if (!this.props?.control) return;\n\n this.valueChangesSubscription = this.props.control.valueChanges.subscribe(value => {\n if (this.isProcessingChanges) return;\n\n try {\n this.isProcessingChanges = true;\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n } finally {\n this.isProcessingChanges = false;\n }\n });\n }\n\n // Compara si dos arrays de opciones son iguales\n private areOptionsEqual(prevOptions: any[], newOptions: any[]): boolean {\n // PERF: Use reference equality first for fast path\n if (prevOptions === newOptions) return true;\n if (!prevOptions || !newOptions) return prevOptions === newOptions;\n if (prevOptions.length !== newOptions.length) return false;\n // Only compare valueProperty for equality\n for (let i = 0; i < prevOptions.length; i++) {\n if (prevOptions[i][this.valueProperty] !== newOptions[i][this.valueProperty]) {\n return false;\n }\n }\n return true;\n }\n\n private initializeItems(): void {\n // PERF: Avoid unnecessary array copies\n this.filteredItems = this.props?.options || [];\n }\n\n private syncControlValueWithSelectedItems(): void {\n if (!this.props?.control) {\n this.selectedItems = [];\n return;\n }\n const controlValue = this.props.control.value;\n if (controlValue === null || controlValue === undefined) {\n this.selectedItems = [];\n return;\n }\n // PERF: Use a Map for faster lookup if options are large\n if (this.props.options && this.props.options.length > 0) {\n const map = new Map(this.props.options.map(opt => [opt[this.valueProperty], opt]));\n const selectedOption = map.get(controlValue);\n this.selectedItems = selectedOption ? [selectedOption] : [];\n } else {\n this.selectedItems = [];\n }\n }\n\n private applyDefaultValue(): void {\n applyDefaultValueToControl(this.props);\n }\n\n onFilter(event) {\n // If no search term, show all options\n if (!event || event.trim() === '') {\n this.filteredItems = this.props?.options ? [...this.props.options] : [];\n this.changeDetector.detectChanges();\n return;\n }\n\n // If no options, nothing to filter\n if (!this.props?.options || this.props.options.length === 0) {\n this.filteredItems = [];\n this.changeDetector.detectChanges();\n return;\n }\n\n // PERF: Avoid repeated replaceSpecialChars and toLowerCase for each option\n const search = replaceSpecialChars(event.toLowerCase());\n this.filteredItems = this.props.options.filter(element => {\n // Only use labelProperty and valueProperty for filtering (faster)\n const label = element[this.labelProperty]\n ? replaceSpecialChars(String(element[this.labelProperty]).toLowerCase())\n : '';\n const value = element[this.valueProperty]\n ? replaceSpecialChars(String(element[this.valueProperty]).toLowerCase())\n : '';\n return label.includes(search) || value.includes(search);\n });\n this.changeDetector.detectChanges();\n }\n\n onFocus() {\n console.log('onFocus');\n }\n\n onBlur() {\n console.log('onBlur');\n }\n\n openModal() {\n if (this.modal) {\n this.modal.present();\n }\n }\n\n preventDefaultBehavior(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.openModal();\n }\n\n cancelModal() {\n // Reset filter and show all options when closing modal\n this.searchTerm = '';\n this.filteredItems = this.props?.options ? [...this.props.options] : [];\n this.changeDetector.detectChanges();\n if (this.modal) {\n this.modal.dismiss();\n }\n }\n\n selectItem(item: any) {\n if (this.multiple) {\n const index = this.selectedItems.findIndex(\n selectedItem => selectedItem[this.valueProperty] === item[this.valueProperty]\n );\n\n if (index === -1) {\n this.selectedItems.push(item);\n } else {\n this.selectedItems.splice(index, 1);\n }\n } else {\n this.selectedItems = [item];\n this.cancelModal();\n }\n\n this.updateDisplayValue();\n this.applyChanges();\n }\n\n isItemSelected(item: any): boolean {\n return this.selectedItems.some(selectedItem => selectedItem[this.valueProperty] === item[this.valueProperty]);\n }\n\n updateDisplayValue() {\n if (this.selectedItems.length === 0) {\n this.displayValue = '';\n return;\n }\n\n if (this.multiple) {\n if (this.selectedItems.length === 1) {\n this.displayValue = this.selectedItems[0][this.labelProperty];\n } else {\n this.displayValue = `${this.selectedItems.length} elementos seleccionados`;\n }\n } else {\n this.displayValue = this.selectedItems[0][this.labelProperty];\n }\n }\n\n applyChanges() {\n if (!this.props?.control) {\n return;\n }\n\n try {\n this.isProcessingChanges = true;\n\n if (this.selectedItems.length > 0) {\n this.props.control.setValue(this.selectedItems[0][this.valueProperty]);\n } else {\n this.props.control.setValue(null);\n }\n\n this.props.control.markAsDirty();\n this.props.control.updateValueAndValidity();\n } finally {\n this.isProcessingChanges = false;\n }\n }\n\n // Método público para reiniciar el componente\n reset() {\n this.selectedItems = [];\n this.displayValue = '';\n if (this.props?.control) {\n this.props.control.setValue(null);\n }\n this.changeDetector.detectChanges();\n }\n}\n","import { Component, Input, OnInit, OnDestroy, inject, Output, EventEmitter } from '@angular/core';\nimport { IonSegment, IonSegmentButton, IonLabel, IonIcon } from '@ionic/angular/standalone';\nimport { CommonModule } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport { SegmentControlMetadata, SegmentOption } from './types';\nimport { ComponentStates } from '../../types';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { addIcons } from 'ionicons';\nimport { list, grid, apps, menu, settings, home, search, person, heart, star } from 'ionicons/icons';\n\n// Register common icons\naddIcons({ list, grid, apps, menu, settings, home, search, person, heart, star });\n\n@Component({\n selector: 'val-segment-control',\n standalone: true,\n imports: [CommonModule, IonSegment, IonSegmentButton, IonLabel, IonIcon],\n template: `\n <ion-segment\n [value]=\"props.value\"\n [color]=\"props.color || 'primary'\"\n [disabled]=\"props.state === states.DISABLED || props.disabled\"\n [scrollable]=\"props.scrollable ?? false\"\n [swipeGesture]=\"props.swipeGesture ?? true\"\n [mode]=\"props.mode\"\n (ionChange)=\"onSegmentChange($event)\"\n >\n @for (option of props.options; track option.value) {\n <ion-segment-button\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n [layout]=\"option.layout || 'icon-top'\"\n >\n @if (option.icon) {\n <ion-icon [name]=\"option.icon\"></ion-icon>\n }\n @if (getOptionLabel(option)) {\n <ion-label>{{ getOptionLabel(option) }}</ion-label>\n }\n </ion-segment-button>\n }\n </ion-segment>\n `,\n styleUrls: ['./segment-control.component.scss'],\n})\n/**\n * val-segment-control\n *\n * A segmented control for switching between views or options.\n * Commonly used for list/grid toggles, tab-like navigation inline.\n *\n * @example Basic usage\n * <val-segment-control [props]=\"{\n * options: [\n * { value: 'list', label: 'List', icon: 'list' },\n * { value: 'grid', label: 'Grid', icon: 'grid' }\n * ],\n * value: 'list'\n * }\" (segmentChange)=\"onViewChange($event)\"></val-segment-control>\n *\n * @example With reactive content\n * <val-segment-control [props]=\"{\n * options: [\n * { value: 'all', contentKey: 'allItems', contentClass: 'FilterComponent' },\n * { value: 'favorites', contentKey: 'favorites', contentClass: 'FilterComponent' }\n * ],\n * value: 'all',\n * color: 'secondary'\n * }\"></val-segment-control>\n *\n * @input props: SegmentControlMetadata - Configuration for the segment control\n * @output segmentChange: string - Emits the selected value when changed\n */\nexport class SegmentControlComponent implements OnInit, OnDestroy {\n /**\n * Input configuration object.\n * @type {SegmentControlMetadata}\n */\n @Input() props: SegmentControlMetadata;\n\n /**\n * Emits the selected value when the segment changes.\n */\n @Output() segmentChange = new EventEmitter<string>();\n\n states = ComponentStates;\n optionLabels: Map<string, string> = new Map();\n\n private langService = inject(LangService);\n private subscriptions: Subscription[] = [];\n\n ngOnInit() {\n this.setupOptionLabels();\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach((sub) => sub.unsubscribe());\n }\n\n onSegmentChange(event: CustomEvent): void {\n const value = event.detail.value;\n this.segmentChange.emit(value);\n }\n\n getOptionLabel(option: SegmentOption): string {\n if (option.label) {\n return option.label;\n }\n return this.optionLabels.get(option.value) || option.contentFallback || '';\n }\n\n private setupOptionLabels(): void {\n this.props.options.forEach((option) => {\n if (option.label) {\n this.optionLabels.set(option.value, option.label);\n } else if (option.contentKey && option.contentClass) {\n const sub = this.langService\n .getContent(option.contentClass, option.contentKey, option.contentFallback)\n .subscribe((content) => {\n this.optionLabels.set(option.value, content);\n });\n this.subscriptions.push(sub);\n } else if (option.contentFallback) {\n this.optionLabels.set(option.value, option.contentFallback);\n }\n });\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonInput } from '@ionic/angular/standalone';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { ComponentStates, InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-text-input',\n standalone: true,\n imports: [ReactiveFormsModule, IonInput],\n template: ` <ion-input [formControl]=\"props.control\" type=\"text\" [placeholder]=\"props.placeholder\" /> `,\n styleUrls: ['./text-input.component.scss'],\n})\n/**\n * val-text-input\n *\n * A text input field integrated with Angular forms.\n *\n * @example\n * <val-text-input [props]=\"{ control: myControl, placeholder: 'Enter text', ... }\"></val-text-input>\n *\n * @input props: InputMetadata - Configuration for the input (form control, placeholder, label, etc.)\n */\nexport class TextInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the input.\n * @property placeholder - The placeholder text.\n * @property label, name, hint, type, validators, etc. - See InputMetadata for all options.\n */\n @Input() props: InputMetadata;\n\n states = ComponentStates;\n\n constructor() {}\n\n ngOnInit() {\n // Apply default values on initialization\n if (this.props?.withDefault || this.props?.value) {\n applyDefaultValueToControl(this.props);\n }\n }\n}\n","import { Component, Input, OnInit, OnDestroy, inject } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonToggle } from '@ionic/angular/standalone';\nimport { CommonModule } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport { ToggleInputMetadata } from './types';\nimport { ComponentStates } from '../../types';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\n\n@Component({\n selector: 'val-toggle-input',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, IonToggle],\n template: `\n <ion-toggle\n [formControl]=\"props.control\"\n [color]=\"props.color || 'primary'\"\n [disabled]=\"props.state === states.DISABLED || props.disabled\"\n [labelPlacement]=\"props.labelPosition || 'end'\"\n [justify]=\"props.justify || 'start'\"\n >\n {{ displayLabel }}\n </ion-toggle>\n `,\n styleUrls: ['./toggle-input.component.scss'],\n})\n/**\n * val-toggle-input\n *\n * A toggle/switch input for boolean values, integrated with Angular forms.\n * Supports reactive content for labels.\n *\n * @example\n * <val-toggle-input [props]=\"{\n * control: myBooleanControl,\n * label: 'Enable notifications',\n * color: 'primary',\n * labelPosition: 'end'\n * }\"></val-toggle-input>\n *\n * @example With reactive content\n * <val-toggle-input [props]=\"{\n * control: myControl,\n * contentKey: 'enableNotifications',\n * contentClass: 'SettingsComponent',\n * contentFallback: 'Enable notifications'\n * }\"></val-toggle-input>\n *\n * @input props: ToggleInputMetadata - Configuration for the toggle input\n */\nexport class ToggleInputComponent implements OnInit, OnDestroy {\n /**\n * Input configuration object.\n * @type {ToggleInputMetadata}\n */\n @Input() props: ToggleInputMetadata;\n\n states = ComponentStates;\n displayLabel: string = '';\n\n private langService = inject(LangService);\n private subscription?: Subscription;\n\n ngOnInit() {\n this.setupLabel();\n }\n\n ngOnDestroy() {\n this.subscription?.unsubscribe();\n }\n\n private setupLabel(): void {\n if (this.props.label) {\n this.displayLabel = this.props.label;\n } else if (this.props.contentKey && this.props.contentClass) {\n this.subscription = this.langService\n .getContent(this.props.contentClass, this.props.contentKey, this.props.contentFallback)\n .subscribe((content) => {\n this.displayLabel = content;\n });\n } else if (this.props.contentFallback) {\n this.displayLabel = this.props.contentFallback;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n inject,\n Input,\n OnChanges,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { Clipboard } from '@capacitor/clipboard';\nimport { ToastController } from '@ionic/angular';\nimport { IonButton, IonIcon } from '@ionic/angular/standalone';\nimport * as Prism from 'prismjs';\n\nimport 'prismjs/components/prism-css';\nimport 'prismjs/components/prism-javascript';\nimport 'prismjs/components/prism-markup';\nimport 'prismjs/components/prism-typescript';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { CodeDisplayMetadata } from './types';\n\n@Component({\n selector: 'val-code-display',\n standalone: true,\n imports: [CommonModule, IonIcon, IonButton],\n template: `\n <div class=\"code-viewer-container\">\n <div class=\"tab-bar\">\n <div\n class=\"tab\"\n *ngFor=\"let tab of props.tabs; let i = index\"\n [class.active]=\"i === selectedTab\"\n (click)=\"selectTab(i)\"\n >\n <span class=\"tab-label\">{{ tab.label }}</span>\n </div>\n </div>\n <div class=\"code-content\">\n <!-- <span class=\"language-badge\">{{ props.tabs[selectedTab]?.language || props.language }}</span> -->\n <ion-button fill=\"clear\" class=\"copy-button\" (click)=\"copyToClipboard()\">\n <ion-icon name=\"copy-outline\"></ion-icon>\n </ion-button>\n <pre><code [class]=\"'language-' + (props.tabs[selectedTab]?.language || props.language)\" #codeElement></code></pre>\n </div>\n </div>\n `,\n\n styleUrl: './code-display.component.scss',\n})\nexport class CodeDisplayComponent implements AfterViewInit, OnChanges {\n @ViewChild('codeElement') codeElement!: ElementRef<HTMLElement>;\n\n @Input() props: CodeDisplayMetadata;\n\n toast = inject(ToastController);\n langService = inject(LangService);\n selectedTab: number = 0;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['code'] || changes['language'] || changes['tabs']) {\n this.cdr.detectChanges();\n setTimeout(() => this.highlightCode());\n }\n }\n\n ngAfterViewInit() {\n setTimeout(() => this.highlightCode());\n }\n\n selectTab(i: number) {\n this.selectedTab = i;\n this.cdr.detectChanges();\n setTimeout(() => this.highlightCode());\n }\n\n private highlightCode() {\n if (this.codeElement) {\n const code = this.props.tabs.length > 0 ? this.props.tabs[this.selectedTab]?.code : this.props.code;\n this.codeElement.nativeElement.textContent = code || '';\n Prism.highlightElement(this.codeElement.nativeElement);\n }\n }\n\n async copyToClipboard() {\n try {\n const code = this.props.tabs.length > 0 ? this.props.tabs[this.selectedTab]?.code : this.props.code;\n await Clipboard.write({ string: code || '' });\n const copiedMessage = this.langService.getText('_global', 'copied', '¡Copiado al portapapeles!');\n this.presentToast(copiedMessage);\n } catch (error) {\n console.error('Error al copiar al portapapeles:', error);\n }\n }\n\n async presentToast(message: string) {\n const toast = await this.toast.create({\n message: message,\n duration: 2000,\n position: 'bottom',\n color: 'dark',\n });\n toast.present();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { DisplayComponent } from '../../atoms/display/display.component';\nimport { ActionHeaderMetadata } from './types';\n\n@Component({\n selector: 'val-action-header',\n standalone: true,\n imports: [CommonModule, DisplayComponent, ButtonComponent],\n template: `\n <section class=\"header-content-container\">\n <val-display [props]=\"props.title\" />\n <val-button [props]=\"props.action\" />\n </section>\n `,\n styles: `\n .header-content-container {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n `,\n})\nexport class ActionHeaderComponent {\n @Input() props: ActionHeaderMetadata;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, Input } from '@angular/core';\nimport { ThemeService } from '../../../services/theme.service';\nimport { ActionHeaderComponent } from '../action-header/action-header.component';\nimport { PillMetadata } from './types';\n\n@Component({\n selector: 'val-pill',\n standalone: true,\n imports: [CommonModule, ActionHeaderComponent],\n template: `\n <div\n [id]=\"props.token\"\n class=\"fun-card\"\n [class.bordered]=\"props.bordered\"\n [class.hoverable]=\"props.hoverable\"\n [ngStyle]=\"{\n background: theme.IsDark ? 'var(--ion-background-color)' : props.background,\n }\"\n >\n <val-action-header style=\"width: 100%;\" [props]=\"props.content\" />\n </div>\n `,\n styleUrls: ['./pill.component.scss'],\n})\nexport class PillComponent {\n theme = inject(ThemeService);\n\n @Input()\n props: PillMetadata;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, Input } from '@angular/core';\nimport { Clipboard } from '@capacitor/clipboard';\nimport { ToastController } from '@ionic/angular';\nimport { IonIcon } from '@ionic/angular/standalone';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { CommandDisplayMetadata } from './types';\n\n@Component({\n selector: 'val-command-display',\n standalone: true,\n imports: [CommonModule, IonIcon],\n template: `\n <div class=\"command-container\">\n <div class=\"command-text\">$ {{ props.text }}</div>\n <ion-icon name=\"copy-outline\" class=\"copy-icon\" (click)=\"copyCommand()\"></ion-icon>\n </div>\n `,\n styleUrls: ['./command-display.component.scss'],\n})\nexport class CommandDisplayComponent {\n toast = inject(ToastController);\n langService = inject(LangService);\n\n @Input() props: CommandDisplayMetadata;\n\n constructor() {}\n\n async copyCommand() {\n if (this.props.text) {\n await Clipboard.write({\n string: this.props.text,\n });\n const copiedMessage = this.langService.getText('_global', 'copied', '¡Copiado al portapapeles!');\n this.presentToast(copiedMessage);\n }\n }\n\n async presentToast(message: string) {\n const toast = await this.toast.create({\n message: message,\n duration: 2000,\n position: 'bottom',\n color: 'dark',\n });\n toast.present();\n }\n}\n","// src/app/layout/layout.component.ts (solo la parte de styles)\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, Input } from '@angular/core';\nimport { LinkComponent } from '../link/link.component';\nimport { TitleBlockComponent } from '../title-block/title-block.component';\nimport { ImageComponent } from '../../atoms/image/image.component';\nimport { ButtonGroupComponent } from '../button-group/button-group.component';\nimport { IconService } from '../../../services/icons.service';\nimport { InfoMetadata } from './types';\n\n@Component({\n selector: 'val-info',\n standalone: true,\n imports: [CommonModule, LinkComponent, TitleBlockComponent, ImageComponent, ButtonGroupComponent],\n template: `\n @if (props.image) {\n <val-image style=\"display: contents;\" [props]=\"props.image\" />\n }\n <val-title-block style=\"display: block;margin-top: 16px;\" [props]=\"props.title\" />\n\n @if (props.link) {\n <val-link [props]=\"props.link\" />\n }\n\n @if (props.actions) {\n <val-button-group [props]=\"props.actions\" />\n }\n `,\n styles: ``,\n})\nexport class InfoComponent {\n icon = inject(IconService);\n\n @Input() props: InfoMetadata;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n inject,\n Input,\n OnChanges,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { Clipboard } from '@capacitor/clipboard';\nimport { ToastController } from '@ionic/angular';\nimport { IonButton, IonIcon } from '@ionic/angular/standalone';\n\nimport * as Prism from 'prismjs';\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-css';\nimport 'prismjs/components/prism-javascript';\nimport 'prismjs/components/prism-markup';\nimport 'prismjs/components/prism-typescript';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { PlainCodeBoxMetadata } from './types';\n\n@Component({\n selector: 'val-plain-code-box',\n standalone: true,\n imports: [CommonModule, IonIcon, IonButton],\n template: `\n <div class=\"code-box-container\">\n <ion-button *ngIf=\"props.showCopyButton !== false\" fill=\"clear\" class=\"copy-button\" (click)=\"copyCode()\">\n <ion-icon name=\"copy-outline\"></ion-icon>\n </ion-button>\n <pre><code [class]=\"'language-' + (props.language || 'bash')\" #codeBlock><ng-container *ngFor=\"let line of props.lines; let i = index\"><span [class]=\"line.type ? 'line-' + line.type : 'line-normal'\">{{ line.text }}</span><br *ngIf=\"i < props.lines.length - 1\">\n</ng-container></code></pre>\n </div>\n `,\n styleUrls: ['./plain-code-box.component.scss'],\n})\nexport class PlainCodeBoxComponent implements AfterViewInit, OnChanges {\n toast = inject(ToastController);\n cdr = inject(ChangeDetectorRef);\n langService = inject(LangService);\n\n @Input() props: PlainCodeBoxMetadata = { lines: [] };\n\n @ViewChild('codeBlock') codeBlock!: ElementRef<HTMLElement>;\n\n constructor() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props'] && !changes['props'].firstChange) {\n this.cdr.detectChanges();\n setTimeout(() => this.highlightCode());\n }\n }\n\n ngAfterViewInit() {\n setTimeout(() => this.highlightCode());\n }\n\n private highlightCode() {\n if (this.codeBlock && this.props.lines && this.props.lines.length > 0) {\n Prism.highlightElement(this.codeBlock.nativeElement);\n }\n }\n\n async copyCode() {\n const fullCode = this.props.lines.map(line => line.text).join('\\n');\n if (fullCode) {\n await Clipboard.write({\n string: fullCode,\n });\n const copiedMessage = this.langService.getText('_global', 'copied', '¡Copiado al portapapeles!');\n this.presentToast(copiedMessage);\n }\n }\n\n async presentToast(message: string) {\n const toast = await this.toast.create({\n message: message,\n duration: 2000,\n position: 'bottom',\n color: 'dark',\n });\n toast.present();\n }\n}\n","import { Component, Input, OnInit, OnDestroy, inject, Output, EventEmitter } from '@angular/core';\nimport { IonAccordion, IonAccordionGroup, IonItem, IonLabel, IonIcon } from '@ionic/angular/standalone';\nimport { CommonModule } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport { AccordionMetadata, AccordionItemMetadata } from './types';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { addIcons } from 'ionicons';\nimport { chevronDown, helpCircle, informationCircle, documentText } from 'ionicons/icons';\n\naddIcons({ chevronDown, helpCircle, informationCircle, documentText });\n\n@Component({\n selector: 'val-accordion',\n standalone: true,\n imports: [CommonModule, IonAccordion, IonAccordionGroup, IonItem, IonLabel, IonIcon],\n template: `\n <ion-accordion-group\n [multiple]=\"props.multiple ?? false\"\n [value]=\"props.value\"\n [readonly]=\"props.readonly ?? false\"\n [mode]=\"props.mode\"\n (ionChange)=\"onAccordionChange($event)\"\n >\n @for (item of props.items; track item.value) {\n <ion-accordion [value]=\"item.value\" [disabled]=\"item.disabled\">\n <ion-item slot=\"header\" [color]=\"props.color || 'light'\">\n @if (item.icon) {\n <ion-icon [name]=\"item.icon\" slot=\"start\"></ion-icon>\n }\n <ion-label>{{ getItemHeader(item) }}</ion-label>\n </ion-item>\n <div class=\"ion-padding accordion-content\" slot=\"content\">\n {{ getItemContent(item) }}\n </div>\n </ion-accordion>\n }\n </ion-accordion-group>\n `,\n styleUrls: ['./accordion.component.scss'],\n})\n/**\n * val-accordion\n *\n * An accordion component for collapsible content sections.\n * Ideal for FAQs, settings, and expandable content.\n *\n * @example Basic usage\n * <val-accordion [props]=\"{\n * items: [\n * { value: 'faq1', header: 'What is this?', content: 'This is an accordion.' },\n * { value: 'faq2', header: 'How does it work?', content: 'Click to expand.' }\n * ]\n * }\"></val-accordion>\n *\n * @example Multiple open\n * <val-accordion [props]=\"{\n * items: [...],\n * multiple: true,\n * value: ['faq1', 'faq2']\n * }\"></val-accordion>\n *\n * @input props: AccordionMetadata - Configuration for the accordion\n * @output accordionChange: string | string[] - Emits expanded value(s)\n */\nexport class AccordionComponent implements OnInit, OnDestroy {\n @Input() props: AccordionMetadata;\n\n @Output() accordionChange = new EventEmitter<string | string[] | null>();\n\n private langService = inject(LangService);\n private subscriptions: Subscription[] = [];\n private headerLabels: Map<string, string> = new Map();\n private contentLabels: Map<string, string> = new Map();\n\n ngOnInit() {\n this.setupLabels();\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach((sub) => sub.unsubscribe());\n }\n\n onAccordionChange(event: CustomEvent): void {\n this.accordionChange.emit(event.detail.value);\n }\n\n getItemHeader(item: AccordionItemMetadata): string {\n if (item.header) return item.header;\n return this.headerLabels.get(item.value) || item.headerFallback || '';\n }\n\n getItemContent(item: AccordionItemMetadata): string {\n if (item.content) return item.content;\n return this.contentLabels.get(item.value) || item.contentFallback || '';\n }\n\n private setupLabels(): void {\n this.props.items.forEach((item) => {\n // Setup header\n if (item.header) {\n this.headerLabels.set(item.value, item.header);\n } else if (item.headerKey && item.contentClass) {\n const sub = this.langService\n .getContent(item.contentClass, item.headerKey, item.headerFallback)\n .subscribe((content) => this.headerLabels.set(item.value, content));\n this.subscriptions.push(sub);\n }\n\n // Setup content\n if (item.content) {\n this.contentLabels.set(item.value, item.content);\n } else if (item.contentKey && item.contentClass) {\n const sub = this.langService\n .getContent(item.contentClass, item.contentKey, item.contentFallback)\n .subscribe((content) => this.contentLabels.set(item.value, content));\n this.subscriptions.push(sub);\n }\n });\n }\n}\n","import { Component, Input, OnInit, OnDestroy, inject, Output, EventEmitter } from '@angular/core';\nimport { IonTabBar, IonTabButton, IonIcon, IonLabel, IonBadge } from '@ionic/angular/standalone';\nimport { CommonModule } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport { TabsMetadata, TabMetadata } from './types';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { addIcons } from 'ionicons';\nimport { home, settings, person, search, heart, star, notifications, mail, calendar, folder } from 'ionicons/icons';\n\naddIcons({ home, settings, person, search, heart, star, notifications, mail, calendar, folder });\n\n@Component({\n selector: 'val-tabs',\n standalone: true,\n imports: [CommonModule, IonTabBar, IonTabButton, IonIcon, IonLabel, IonBadge],\n template: `\n <ion-tab-bar\n [color]=\"props.color\"\n [mode]=\"props.mode\"\n [translucent]=\"props.translucent ?? false\"\n [selectedTab]=\"props.selectedTab || props.tabs[0]?.value\"\n >\n @for (tab of props.tabs; track tab.value) {\n <ion-tab-button\n [tab]=\"tab.value\"\n [disabled]=\"tab.disabled\"\n [layout]=\"props.layout || 'icon-top'\"\n (click)=\"onTabClick(tab)\"\n >\n @if (tab.icon && props.layout !== 'icon-hide') {\n <ion-icon [name]=\"tab.icon\"></ion-icon>\n }\n @if (getTabLabel(tab) && props.layout !== 'label-hide') {\n <ion-label>{{ getTabLabel(tab) }}</ion-label>\n }\n @if (tab.badge) {\n <ion-badge [color]=\"tab.badgeColor || 'danger'\">{{ tab.badge }}</ion-badge>\n }\n </ion-tab-button>\n }\n </ion-tab-bar>\n `,\n styleUrls: ['./tabs.component.scss'],\n})\n/**\n * val-tabs\n *\n * A tab bar component for navigation between views.\n * Can be positioned at top or bottom of the screen.\n *\n * @example Basic usage\n * <val-tabs [props]=\"{\n * tabs: [\n * { value: 'home', label: 'Home', icon: 'home' },\n * { value: 'search', label: 'Search', icon: 'search' },\n * { value: 'profile', label: 'Profile', icon: 'person' }\n * ],\n * selectedTab: 'home'\n * }\" (tabChange)=\"onTabChange($event)\"></val-tabs>\n *\n * @example With badges\n * <val-tabs [props]=\"{\n * tabs: [\n * { value: 'inbox', label: 'Inbox', icon: 'mail', badge: 5 },\n * { value: 'notifications', label: 'Alerts', icon: 'notifications', badge: '99+' }\n * ]\n * }\"></val-tabs>\n *\n * @input props: TabsMetadata - Configuration for the tabs\n * @output tabChange: TabMetadata - Emits when a tab is selected\n */\nexport class TabsComponent implements OnInit, OnDestroy {\n @Input() props: TabsMetadata;\n\n @Output() tabChange = new EventEmitter<TabMetadata>();\n\n private langService = inject(LangService);\n private subscriptions: Subscription[] = [];\n private tabLabels: Map<string, string> = new Map();\n\n ngOnInit() {\n this.setupLabels();\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach((sub) => sub.unsubscribe());\n }\n\n onTabClick(tab: TabMetadata): void {\n if (!tab.disabled) {\n this.tabChange.emit(tab);\n }\n }\n\n getTabLabel(tab: TabMetadata): string {\n if (tab.label) return tab.label;\n return this.tabLabels.get(tab.value) || tab.contentFallback || '';\n }\n\n private setupLabels(): void {\n this.props.tabs.forEach((tab) => {\n if (tab.label) {\n this.tabLabels.set(tab.value, tab.label);\n } else if (tab.contentKey && tab.contentClass) {\n const sub = this.langService\n .getContent(tab.contentClass, tab.contentKey, tab.contentFallback)\n .subscribe((content) => this.tabLabels.set(tab.value, content));\n this.subscriptions.push(sub);\n }\n });\n }\n}\n","import { Component, Input, OnInit, OnDestroy, inject, Output, EventEmitter } from '@angular/core';\nimport { IonBreadcrumb, IonBreadcrumbs, IonIcon } from '@ionic/angular/standalone';\nimport { CommonModule } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport { BreadcrumbMetadata, BreadcrumbItemMetadata } from './types';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { addIcons } from 'ionicons';\nimport { chevronForward, home, ellipsisHorizontal } from 'ionicons/icons';\n\naddIcons({ chevronForward, home, ellipsisHorizontal });\n\n@Component({\n selector: 'val-breadcrumb',\n standalone: true,\n imports: [CommonModule, IonBreadcrumb, IonBreadcrumbs, IonIcon],\n template: `\n <ion-breadcrumbs\n [maxItems]=\"props.maxItems\"\n [mode]=\"props.mode\"\n (ionCollapsedClick)=\"onCollapsedClick($event)\"\n >\n @for (item of props.items; track $index; let isLast = $last) {\n <ion-breadcrumb\n [href]=\"item.href\"\n [active]=\"item.active || isLast\"\n [disabled]=\"item.disabled\"\n [separator]=\"!isLast\"\n (click)=\"onBreadcrumbClick($event, item, $index)\"\n >\n @if (item.icon) {\n <ion-icon [name]=\"item.icon\" slot=\"start\"></ion-icon>\n }\n {{ getItemLabel(item) }}\n @if (!isLast && props.separatorIcon) {\n <ion-icon [name]=\"props.separatorIcon\" slot=\"separator\"></ion-icon>\n }\n </ion-breadcrumb>\n }\n </ion-breadcrumbs>\n `,\n styleUrls: ['./breadcrumb.component.scss'],\n})\n/**\n * val-breadcrumb\n *\n * A breadcrumb navigation component for hierarchical navigation.\n * Supports collapsing items when there are too many.\n *\n * @example Basic usage\n * <val-breadcrumb [props]=\"{\n * items: [\n * { label: 'Home', href: '/', icon: 'home' },\n * { label: 'Products', href: '/products' },\n * { label: 'Electronics', href: '/products/electronics' },\n * { label: 'Phones', active: true }\n * ]\n * }\"></val-breadcrumb>\n *\n * @example With max items (collapse)\n * <val-breadcrumb [props]=\"{\n * items: [...],\n * maxItems: 4,\n * separatorIcon: 'chevron-forward'\n * }\"></val-breadcrumb>\n *\n * @input props: BreadcrumbMetadata - Configuration for the breadcrumb\n * @output breadcrumbClick: { item: BreadcrumbItemMetadata, index: number }\n */\nexport class BreadcrumbComponent implements OnInit, OnDestroy {\n @Input() props: BreadcrumbMetadata;\n\n @Output() breadcrumbClick = new EventEmitter<{ item: BreadcrumbItemMetadata; index: number }>();\n @Output() collapsedClick = new EventEmitter<CustomEvent>();\n\n private langService = inject(LangService);\n private subscriptions: Subscription[] = [];\n private itemLabels: Map<number, string> = new Map();\n\n ngOnInit() {\n this.setupLabels();\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach((sub) => sub.unsubscribe());\n }\n\n onBreadcrumbClick(event: Event, item: BreadcrumbItemMetadata, index: number): void {\n if (!item.disabled && !item.active) {\n this.breadcrumbClick.emit({ item, index });\n }\n }\n\n onCollapsedClick(event: CustomEvent): void {\n this.collapsedClick.emit(event);\n }\n\n getItemLabel(item: BreadcrumbItemMetadata): string {\n const index = this.props.items.indexOf(item);\n if (item.label) return item.label;\n return this.itemLabels.get(index) || item.contentFallback || '';\n }\n\n private setupLabels(): void {\n this.props.items.forEach((item, index) => {\n if (item.label) {\n this.itemLabels.set(index, item.label);\n } else if (item.contentKey && item.contentClass) {\n const sub = this.langService\n .getContent(item.contentClass, item.contentKey, item.contentFallback)\n .subscribe((content) => this.itemLabels.set(index, content));\n this.subscriptions.push(sub);\n }\n });\n }\n}\n","import { Component, Input, OnChanges, Output, EventEmitter, SimpleChanges } from '@angular/core';\nimport { IonButton, IonIcon } from '@ionic/angular/standalone';\nimport { CommonModule } from '@angular/common';\nimport { PaginationMetadata, PageChangeEvent } from './types';\nimport { addIcons } from 'ionicons';\nimport { chevronBack, chevronForward, playBack, playForward } from 'ionicons/icons';\n\naddIcons({ chevronBack, chevronForward, playBack, playForward });\n\n@Component({\n selector: 'val-pagination',\n standalone: true,\n imports: [CommonModule, IonButton, IonIcon],\n template: `\n <div class=\"pagination-container\" [class.disabled]=\"props.disabled\">\n @if (props.showFirstLast !== false) {\n <ion-button\n fill=\"clear\"\n [size]=\"props.size || 'default'\"\n [color]=\"props.color || 'primary'\"\n [disabled]=\"props.disabled || props.currentPage <= 1\"\n (click)=\"goToPage(1)\"\n >\n <ion-icon slot=\"icon-only\" name=\"play-back\"></ion-icon>\n </ion-button>\n }\n\n @if (props.showPrevNext !== false) {\n <ion-button\n fill=\"clear\"\n [size]=\"props.size || 'default'\"\n [color]=\"props.color || 'primary'\"\n [disabled]=\"props.disabled || props.currentPage <= 1\"\n (click)=\"goToPage(props.currentPage - 1)\"\n >\n <ion-icon slot=\"icon-only\" name=\"chevron-back\"></ion-icon>\n </ion-button>\n }\n\n @for (page of visiblePages; track page) {\n @if (page === -1) {\n <span class=\"ellipsis\">...</span>\n } @else {\n <ion-button\n [fill]=\"page === props.currentPage ? 'solid' : 'clear'\"\n [size]=\"props.size || 'default'\"\n [color]=\"props.color || 'primary'\"\n [disabled]=\"props.disabled\"\n (click)=\"goToPage(page)\"\n >\n {{ page }}\n </ion-button>\n }\n }\n\n @if (props.showPrevNext !== false) {\n <ion-button\n fill=\"clear\"\n [size]=\"props.size || 'default'\"\n [color]=\"props.color || 'primary'\"\n [disabled]=\"props.disabled || props.currentPage >= totalPages\"\n (click)=\"goToPage(props.currentPage + 1)\"\n >\n <ion-icon slot=\"icon-only\" name=\"chevron-forward\"></ion-icon>\n </ion-button>\n }\n\n @if (props.showFirstLast !== false) {\n <ion-button\n fill=\"clear\"\n [size]=\"props.size || 'default'\"\n [color]=\"props.color || 'primary'\"\n [disabled]=\"props.disabled || props.currentPage >= totalPages\"\n (click)=\"goToPage(totalPages)\"\n >\n <ion-icon slot=\"icon-only\" name=\"play-forward\"></ion-icon>\n </ion-button>\n }\n\n @if (props.showPageInfo) {\n <span class=\"page-info\">Page {{ props.currentPage }} of {{ totalPages }}</span>\n }\n </div>\n `,\n styleUrls: ['./pagination.component.scss'],\n})\n/**\n * val-pagination\n *\n * A pagination component for navigating through paged content.\n *\n * @example Basic usage\n * <val-pagination [props]=\"{\n * currentPage: 1,\n * totalPages: 10,\n * showPageInfo: true\n * }\" (pageChange)=\"onPageChange($event)\"></val-pagination>\n *\n * @example With total items\n * <val-pagination [props]=\"{\n * currentPage: 1,\n * totalItems: 100,\n * pageSize: 10,\n * maxVisiblePages: 5\n * }\"></val-pagination>\n *\n * @input props: PaginationMetadata - Configuration for pagination\n * @output pageChange: PageChangeEvent - Emits when page changes\n */\nexport class PaginationComponent implements OnChanges {\n @Input() props: PaginationMetadata;\n\n @Output() pageChange = new EventEmitter<PageChangeEvent>();\n\n visiblePages: number[] = [];\n totalPages: number = 1;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n this.calculateTotalPages();\n this.calculateVisiblePages();\n }\n }\n\n goToPage(page: number): void {\n if (page < 1 || page > this.totalPages || page === this.props.currentPage) {\n return;\n }\n\n const event: PageChangeEvent = {\n page,\n previousPage: this.props.currentPage,\n pageSize: this.props.pageSize || 10,\n };\n\n this.pageChange.emit(event);\n }\n\n private calculateTotalPages(): void {\n if (this.props.totalPages) {\n this.totalPages = this.props.totalPages;\n } else if (this.props.totalItems && this.props.pageSize) {\n this.totalPages = Math.ceil(this.props.totalItems / this.props.pageSize);\n } else {\n this.totalPages = 1;\n }\n }\n\n private calculateVisiblePages(): void {\n const maxVisible = this.props.maxVisiblePages || 5;\n const current = this.props.currentPage;\n const total = this.totalPages;\n\n if (total <= maxVisible) {\n this.visiblePages = Array.from({ length: total }, (_, i) => i + 1);\n return;\n }\n\n const pages: number[] = [];\n const half = Math.floor(maxVisible / 2);\n\n let start = Math.max(1, current - half);\n let end = Math.min(total, start + maxVisible - 1);\n\n if (end - start < maxVisible - 1) {\n start = Math.max(1, end - maxVisible + 1);\n }\n\n // Always show first page\n if (start > 1) {\n pages.push(1);\n if (start > 2) {\n pages.push(-1); // Ellipsis\n }\n }\n\n // Middle pages\n for (let i = start; i <= end; i++) {\n if (!pages.includes(i)) {\n pages.push(i);\n }\n }\n\n // Always show last page\n if (end < total) {\n if (end < total - 1) {\n pages.push(-1); // Ellipsis\n }\n pages.push(total);\n }\n\n this.visiblePages = pages;\n }\n}\n","import { Component, Input, OnInit, OnDestroy, inject, Output, EventEmitter } from '@angular/core';\nimport { IonIcon } from '@ionic/angular/standalone';\nimport { CommonModule } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport { StepperMetadata, StepMetadata, StepChangeEvent, StepStatus } from './types';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { addIcons } from 'ionicons';\nimport { checkmark, close, ellipse } from 'ionicons/icons';\n\naddIcons({ checkmark, close, ellipse });\n\n@Component({\n selector: 'val-stepper',\n standalone: true,\n imports: [CommonModule, IonIcon],\n template: `\n <div\n class=\"stepper-container\"\n [class.horizontal]=\"props.orientation !== 'vertical'\"\n [class.vertical]=\"props.orientation === 'vertical'\"\n >\n @for (step of props.steps; track step.value; let i = $index; let isLast = $last) {\n <div\n class=\"step\"\n [class.current]=\"getStepStatus(step, i) === 'current'\"\n [class.completed]=\"getStepStatus(step, i) === 'completed'\"\n [class.error]=\"getStepStatus(step, i) === 'error'\"\n [class.disabled]=\"step.disabled\"\n [class.clickable]=\"isStepClickable(step, i)\"\n (click)=\"onStepClick(step, i)\"\n >\n <div class=\"step-indicator\">\n <div class=\"step-circle\" [style.--step-color]=\"getStepColor(step, i)\">\n @if (getStepStatus(step, i) === 'completed') {\n <ion-icon name=\"checkmark\"></ion-icon>\n } @else if (getStepStatus(step, i) === 'error') {\n <ion-icon name=\"close\"></ion-icon>\n } @else if (step.icon) {\n <ion-icon [name]=\"step.icon\"></ion-icon>\n } @else if (props.showNumbers !== false) {\n <span class=\"step-number\">{{ i + 1 }}</span>\n } @else {\n <ion-icon name=\"ellipse\"></ion-icon>\n }\n </div>\n @if (!isLast && props.connectorStyle !== 'none') {\n <div\n class=\"step-connector\"\n [class.dashed]=\"props.connectorStyle === 'dashed'\"\n [class.completed]=\"getStepStatus(step, i) === 'completed'\"\n ></div>\n }\n </div>\n <div class=\"step-content\">\n <div class=\"step-label\">\n {{ getStepLabel(step) }}\n @if (step.optional) {\n <span class=\"optional-text\">(Optional)</span>\n }\n </div>\n @if (step.description) {\n <div class=\"step-description\">{{ step.description }}</div>\n }\n </div>\n </div>\n }\n </div>\n `,\n styleUrls: ['./stepper.component.scss'],\n})\n/**\n * val-stepper\n *\n * A stepper component for multi-step processes.\n * Supports horizontal and vertical orientations.\n *\n * @example Basic usage\n * <val-stepper [props]=\"{\n * steps: [\n * { value: 'info', label: 'Personal Info' },\n * { value: 'address', label: 'Address' },\n * { value: 'payment', label: 'Payment' },\n * { value: 'confirm', label: 'Confirm' }\n * ],\n * currentIndex: 1\n * }\" (stepChange)=\"onStepChange($event)\"></val-stepper>\n *\n * @example Vertical with descriptions\n * <val-stepper [props]=\"{\n * steps: [\n * { value: 'step1', label: 'Step 1', description: 'Description here' },\n * { value: 'step2', label: 'Step 2', optional: true }\n * ],\n * orientation: 'vertical',\n * currentIndex: 0\n * }\"></val-stepper>\n *\n * @input props: StepperMetadata - Configuration for the stepper\n * @output stepChange: StepChangeEvent - Emits when step changes\n */\nexport class StepperComponent implements OnInit, OnDestroy {\n @Input() props: StepperMetadata;\n\n @Output() stepChange = new EventEmitter<StepChangeEvent>();\n\n private langService = inject(LangService);\n private subscriptions: Subscription[] = [];\n private stepLabels: Map<string, string> = new Map();\n\n ngOnInit() {\n this.setupLabels();\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach((sub) => sub.unsubscribe());\n }\n\n getCurrentIndex(): number {\n if (this.props.currentIndex !== undefined) {\n return this.props.currentIndex;\n }\n if (this.props.currentStep) {\n return this.props.steps.findIndex((s) => s.value === this.props.currentStep);\n }\n return 0;\n }\n\n getStepStatus(step: StepMetadata, index: number): StepStatus {\n if (step.status) return step.status;\n\n const currentIndex = this.getCurrentIndex();\n if (index < currentIndex) return 'completed';\n if (index === currentIndex) return 'current';\n return 'pending';\n }\n\n getStepColor(step: StepMetadata, index: number): string {\n const status = this.getStepStatus(step, index);\n const color = this.props.color || 'primary';\n\n switch (status) {\n case 'completed':\n return `var(--ion-color-${color})`;\n case 'current':\n return `var(--ion-color-${color})`;\n case 'error':\n return 'var(--ion-color-danger)';\n default:\n return 'var(--ion-color-medium)';\n }\n }\n\n isStepClickable(step: StepMetadata, index: number): boolean {\n if (step.disabled) return false;\n if (!this.props.linear) return true;\n\n const currentIndex = this.getCurrentIndex();\n // In linear mode, can only go to completed steps or next step\n return index <= currentIndex || (step.editable && index < currentIndex);\n }\n\n onStepClick(step: StepMetadata, index: number): void {\n if (!this.isStepClickable(step, index)) return;\n\n const currentIndex = this.getCurrentIndex();\n if (index === currentIndex) return;\n\n this.stepChange.emit({\n step,\n index,\n previousIndex: currentIndex,\n });\n }\n\n getStepLabel(step: StepMetadata): string {\n if (step.label) return step.label;\n return this.stepLabels.get(step.value) || step.contentFallback || '';\n }\n\n private setupLabels(): void {\n this.props.steps.forEach((step) => {\n if (step.label) {\n this.stepLabels.set(step.value, step.label);\n } else if (step.contentKey && step.contentClass) {\n const sub = this.langService\n .getContent(step.contentClass, step.contentKey, step.contentFallback)\n .subscribe((content) => this.stepLabels.set(step.value, content));\n this.subscriptions.push(sub);\n }\n });\n }\n}\n","import { Component, Input, OnInit, OnDestroy, inject, Output, EventEmitter } from '@angular/core';\nimport { IonChip, IonIcon, IonLabel } from '@ionic/angular/standalone';\nimport { CommonModule } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport { ChipGroupMetadata, ChipMetadata, ChipSelectionEvent, ChipRemoveEvent } from './types';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { addIcons } from 'ionicons';\nimport { close, checkmark } from 'ionicons/icons';\n\naddIcons({ close, checkmark });\n\n@Component({\n selector: 'val-chip-group',\n standalone: true,\n imports: [CommonModule, IonChip, IonIcon, IonLabel],\n template: `\n <div class=\"chip-group\" [class.wrap]=\"props.wrap !== false\">\n @for (chip of props.chips; track chip.value) {\n <ion-chip\n [color]=\"getChipColor(chip)\"\n [outline]=\"props.outline && !chip.selected\"\n [disabled]=\"chip.disabled\"\n (click)=\"onChipClick(chip)\"\n >\n @if (chip.icon) {\n <ion-icon [name]=\"chip.icon\"></ion-icon>\n }\n @if (chip.selected && props.selectable) {\n <ion-icon name=\"checkmark\" class=\"selected-icon\"></ion-icon>\n }\n <ion-label>{{ getChipLabel(chip) }}</ion-label>\n @if (props.removable && !chip.disabled) {\n <ion-icon name=\"close\" class=\"remove-icon\" (click)=\"onRemoveChip($event, chip)\"></ion-icon>\n }\n </ion-chip>\n }\n </div>\n `,\n styleUrls: ['./chip-group.component.scss'],\n})\n/**\n * val-chip-group\n *\n * A group of chips for tags, filters, or selections.\n * Supports single/multiple selection and removable chips.\n *\n * @example Basic selectable\n * <val-chip-group [props]=\"{\n * chips: [\n * { value: 'angular', label: 'Angular' },\n * { value: 'react', label: 'React' },\n * { value: 'vue', label: 'Vue' }\n * ],\n * selectable: true,\n * multiple: true\n * }\" (selectionChange)=\"onSelectionChange($event)\"></val-chip-group>\n *\n * @example Removable tags\n * <val-chip-group [props]=\"{\n * chips: [\n * { value: 'tag1', label: 'Tag 1', icon: 'pricetag' },\n * { value: 'tag2', label: 'Tag 2' }\n * ],\n * removable: true,\n * color: 'tertiary'\n * }\" (chipRemove)=\"onChipRemove($event)\"></val-chip-group>\n *\n * @input props: ChipGroupMetadata - Configuration for the chip group\n * @output selectionChange: ChipSelectionEvent - Emits when selection changes\n * @output chipRemove: ChipRemoveEvent - Emits when a chip is removed\n */\nexport class ChipGroupComponent implements OnInit, OnDestroy {\n @Input() props: ChipGroupMetadata;\n\n @Output() selectionChange = new EventEmitter<ChipSelectionEvent>();\n @Output() chipRemove = new EventEmitter<ChipRemoveEvent>();\n @Output() chipClick = new EventEmitter<ChipMetadata>();\n\n private langService = inject(LangService);\n private subscriptions: Subscription[] = [];\n private chipLabels: Map<string, string> = new Map();\n\n ngOnInit() {\n this.setupLabels();\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach((sub) => sub.unsubscribe());\n }\n\n getChipColor(chip: ChipMetadata): string {\n if (chip.selected && this.props.selectedColor) {\n return this.props.selectedColor;\n }\n return chip.color || this.props.color || 'primary';\n }\n\n getChipLabel(chip: ChipMetadata): string {\n if (chip.label) return chip.label;\n return this.chipLabels.get(chip.value) || chip.contentFallback || '';\n }\n\n onChipClick(chip: ChipMetadata): void {\n if (chip.disabled) return;\n\n this.chipClick.emit(chip);\n\n if (!this.props.selectable) return;\n\n if (this.props.multiple) {\n chip.selected = !chip.selected;\n } else {\n // Single selection: deselect all others\n this.props.chips.forEach((c) => {\n c.selected = c.value === chip.value ? !c.selected : false;\n });\n }\n\n this.emitSelectionChange();\n }\n\n onRemoveChip(event: Event, chip: ChipMetadata): void {\n event.stopPropagation();\n\n const index = this.props.chips.indexOf(chip);\n if (index > -1) {\n this.props.chips.splice(index, 1);\n this.chipRemove.emit({\n chip,\n remaining: [...this.props.chips],\n });\n }\n }\n\n private emitSelectionChange(): void {\n const selected = this.props.chips.filter((c) => c.selected);\n const values = selected.map((c) => c.value);\n\n this.selectionChange.emit({\n selected: this.props.multiple ? selected : selected[0],\n values: this.props.multiple ? values : values[0],\n });\n }\n\n private setupLabels(): void {\n this.props.chips.forEach((chip) => {\n if (chip.label) {\n this.chipLabels.set(chip.value, chip.label);\n } else if (chip.contentKey && chip.contentClass) {\n const sub = this.langService\n .getContent(chip.contentClass, chip.contentKey, chip.contentFallback)\n .subscribe((content) => this.chipLabels.set(chip.value, content));\n this.subscriptions.push(sub);\n }\n });\n }\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { IonIcon } from '@ionic/angular/standalone';\nimport { CommonModule } from '@angular/common';\nimport { RatingMetadata, RatingChangeEvent } from './types';\nimport { addIcons } from 'ionicons';\nimport { star, starOutline, starHalf, heart, heartOutline, heartHalf } from 'ionicons/icons';\n\naddIcons({ star, starOutline, starHalf, heart, heartOutline, heartHalf });\n\n@Component({\n selector: 'val-rating',\n standalone: true,\n imports: [CommonModule, IonIcon],\n template: `\n <div\n class=\"rating-container\"\n [class.readonly]=\"props.readonly\"\n [class.disabled]=\"props.disabled\"\n [class]=\"'size-' + (props.size || 'medium')\"\n >\n @for (i of getStars(); track i) {\n <ion-icon\n [name]=\"getStarIcon(i)\"\n [color]=\"getStarColor(i)\"\n [class.clickable]=\"!props.readonly && !props.disabled\"\n (click)=\"onStarClick(i)\"\n (mouseenter)=\"onStarHover(i)\"\n (mouseleave)=\"onStarLeave()\"\n ></ion-icon>\n }\n @if (props.showValue) {\n <span class=\"rating-value\">{{ displayValue }}</span>\n }\n </div>\n `,\n styleUrls: ['./rating.component.scss'],\n})\n/**\n * val-rating\n *\n * A star rating component for feedback and reviews.\n * Supports half stars and custom icons.\n *\n * @example Basic usage\n * <val-rating [props]=\"{\n * value: 3.5,\n * max: 5,\n * allowHalf: true\n * }\" (ratingChange)=\"onRatingChange($event)\"></val-rating>\n *\n * @example Readonly with hearts\n * <val-rating [props]=\"{\n * value: 4,\n * icon: 'heart',\n * iconEmpty: 'heart-outline',\n * readonly: true,\n * color: 'danger',\n * showValue: true\n * }\"></val-rating>\n *\n * @input props: RatingMetadata - Configuration for the rating\n * @output ratingChange: RatingChangeEvent - Emits when rating changes\n */\nexport class RatingComponent {\n @Input() props: RatingMetadata;\n\n @Output() ratingChange = new EventEmitter<RatingChangeEvent>();\n\n hoverValue: number | null = null;\n\n get displayValue(): number {\n return this.hoverValue !== null ? this.hoverValue : this.props.value;\n }\n\n getStars(): number[] {\n const max = this.props.max || 5;\n return Array.from({ length: max }, (_, i) => i + 1);\n }\n\n getStarIcon(position: number): string {\n const value = this.hoverValue !== null ? this.hoverValue : this.props.value;\n const baseIcon = this.props.icon || 'star';\n const emptyIcon = this.props.iconEmpty || `${baseIcon}-outline`;\n const halfIcon = this.props.iconHalf || `${baseIcon}-half`;\n\n if (position <= value) {\n return baseIcon;\n } else if (this.props.allowHalf && position - 0.5 <= value) {\n return halfIcon;\n }\n return emptyIcon;\n }\n\n getStarColor(position: number): string {\n const value = this.hoverValue !== null ? this.hoverValue : this.props.value;\n const isFilled = position <= value || (this.props.allowHalf && position - 0.5 <= value);\n return isFilled ? (this.props.color || 'warning') : (this.props.emptyColor || 'medium');\n }\n\n onStarClick(position: number): void {\n if (this.props.readonly || this.props.disabled) return;\n\n let newValue = position;\n\n // Toggle half value if clicking same star and allowHalf is true\n if (this.props.allowHalf && position === Math.ceil(this.props.value)) {\n if (this.props.value === position) {\n newValue = position - 0.5;\n } else if (this.props.value === position - 0.5) {\n newValue = 0;\n }\n } else if (position === this.props.value) {\n // Click same star again to clear\n newValue = 0;\n }\n\n if (newValue !== this.props.value) {\n this.ratingChange.emit({\n value: newValue,\n previousValue: this.props.value,\n });\n }\n }\n\n onStarHover(position: number): void {\n if (this.props.readonly || this.props.disabled) return;\n this.hoverValue = position;\n }\n\n onStarLeave(): void {\n this.hoverValue = null;\n }\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { IonIcon } from '@ionic/angular/standalone';\nimport { CommonModule } from '@angular/common';\nimport { TimelineMetadata, TimelineItemMetadata } from './types';\nimport { addIcons } from 'ionicons';\nimport { ellipse, checkmarkCircle, timeOutline, calendar, flag } from 'ionicons/icons';\n\naddIcons({ ellipse, checkmarkCircle, timeOutline, calendar, flag });\n\n@Component({\n selector: 'val-timeline',\n standalone: true,\n imports: [CommonModule, IonIcon],\n template: `\n <div\n class=\"timeline\"\n [class.vertical]=\"props.orientation !== 'horizontal'\"\n [class.horizontal]=\"props.orientation === 'horizontal'\"\n [class.alternate]=\"props.alternate\"\n >\n @for (item of props.items; track item.token; let i = $index; let isLast = $last) {\n <div\n class=\"timeline-item\"\n [class.active]=\"item.active\"\n [class.left]=\"props.alternate && i % 2 === 0\"\n [class.right]=\"props.alternate && i % 2 !== 0\"\n (click)=\"onItemClick(item, i)\"\n >\n <div class=\"timeline-marker\" [style.--marker-color]=\"getItemColor(item)\">\n @if (item.icon) {\n <ion-icon [name]=\"item.icon\"></ion-icon>\n } @else {\n <div class=\"marker-dot\"></div>\n }\n </div>\n\n @if (!isLast && props.showConnectors !== false) {\n <div\n class=\"timeline-connector\"\n [class.dashed]=\"props.connectorStyle === 'dashed'\"\n ></div>\n }\n\n <div class=\"timeline-content\">\n @if (item.date) {\n <div class=\"timeline-date\">{{ item.date }}</div>\n }\n <div class=\"timeline-title\">{{ item.title }}</div>\n @if (item.content) {\n <div class=\"timeline-description\">{{ item.content }}</div>\n }\n </div>\n </div>\n }\n </div>\n `,\n styleUrls: ['./timeline.component.scss'],\n})\n/**\n * val-timeline\n *\n * A timeline component for displaying chronological events.\n * Supports vertical and horizontal orientations.\n *\n * @example Basic timeline\n * <val-timeline [props]=\"{\n * items: [\n * { title: 'Order placed', date: 'Jan 1', icon: 'cart' },\n * { title: 'Processing', date: 'Jan 2', active: true },\n * { title: 'Shipped', date: 'Jan 3' },\n * { title: 'Delivered', date: 'Jan 5' }\n * ]\n * }\"></val-timeline>\n *\n * @example Alternate timeline\n * <val-timeline [props]=\"{\n * items: [...],\n * alternate: true,\n * connectorStyle: 'dashed'\n * }\"></val-timeline>\n *\n * @input props: TimelineMetadata - Configuration for the timeline\n * @output itemClick: { item: TimelineItemMetadata, index: number }\n */\nexport class TimelineComponent {\n @Input() props: TimelineMetadata;\n\n @Output() itemClick = new EventEmitter<{ item: TimelineItemMetadata; index: number }>();\n\n getItemColor(item: TimelineItemMetadata): string {\n const color = item.color || this.props.color || 'primary';\n return `var(--ion-color-${color})`;\n }\n\n onItemClick(item: TimelineItemMetadata, index: number): void {\n this.itemClick.emit({ item, index });\n }\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { IonCard, IonCardContent, IonIcon, IonSkeletonText } from '@ionic/angular/standalone';\nimport { CommonModule } from '@angular/common';\nimport { StatsCardMetadata } from './types';\nimport { addIcons } from 'ionicons';\nimport { trendingUp, trendingDown, remove, analytics, people, cash, cart, eye, heart, star } from 'ionicons/icons';\n\naddIcons({ trendingUp, trendingDown, remove, analytics, people, cash, cart, eye, heart, star });\n\n@Component({\n selector: 'val-stats-card',\n standalone: true,\n imports: [CommonModule, IonCard, IonCardContent, IonIcon, IonSkeletonText],\n template: `\n <ion-card\n class=\"stats-card\"\n [class]=\"getBackgroundClass()\"\n [style.--card-color]=\"getCardColor()\"\n (click)=\"cardClick.emit()\"\n >\n <ion-card-content>\n <div class=\"stats-header\">\n <span class=\"stats-title\">{{ props.title }}</span>\n @if (props.icon) {\n <ion-icon [name]=\"props.icon\" class=\"stats-icon\"></ion-icon>\n }\n </div>\n\n <div class=\"stats-value\">\n @if (props.loading) {\n <ion-skeleton-text [animated]=\"true\" style=\"width: 60%; height: 32px;\"></ion-skeleton-text>\n } @else {\n @if (props.prefix) {\n <span class=\"prefix\">{{ props.prefix }}</span>\n }\n <span class=\"value\">{{ props.value }}</span>\n @if (props.suffix) {\n <span class=\"suffix\">{{ props.suffix }}</span>\n }\n }\n </div>\n\n @if (props.trend && !props.loading) {\n <div class=\"stats-trend\" [class]=\"getTrendClass()\">\n <ion-icon [name]=\"getTrendIcon()\"></ion-icon>\n <span class=\"trend-value\">{{ Math.abs(props.trend.value) }}%</span>\n @if (props.trend.label) {\n <span class=\"trend-label\">{{ props.trend.label }}</span>\n }\n </div>\n }\n\n @if (props.footer && !props.loading) {\n <div class=\"stats-footer\">{{ props.footer }}</div>\n }\n </ion-card-content>\n </ion-card>\n `,\n styleUrls: ['./stats-card.component.scss'],\n})\n/**\n * val-stats-card\n *\n * A card component for displaying statistics and KPIs.\n * Supports trends, icons, and various styling options.\n *\n * @example Basic usage\n * <val-stats-card [props]=\"{\n * title: 'Total Users',\n * value: 12500,\n * icon: 'people',\n * color: 'primary'\n * }\"></val-stats-card>\n *\n * @example With trend\n * <val-stats-card [props]=\"{\n * title: 'Revenue',\n * value: 45200,\n * prefix: '$',\n * icon: 'cash',\n * color: 'success',\n * background: 'gradient',\n * trend: { value: 12.5, direction: 'up', label: 'vs last month' }\n * }\"></val-stats-card>\n *\n * @input props: StatsCardMetadata - Configuration for the stats card\n * @output cardClick: void - Emits when card is clicked\n */\nexport class StatsCardComponent {\n @Input() props: StatsCardMetadata;\n\n @Output() cardClick = new EventEmitter<void>();\n\n Math = Math;\n\n getCardColor(): string {\n const color = this.props.color || 'primary';\n return `var(--ion-color-${color})`;\n }\n\n getBackgroundClass(): string {\n const bg = this.props.background || 'light';\n return `background-${bg}`;\n }\n\n getTrendClass(): string {\n const direction = this.props.trend?.direction || 'neutral';\n const invert = this.props.trend?.invertColors;\n\n if (direction === 'neutral') return 'trend-neutral';\n if (direction === 'up') return invert ? 'trend-down' : 'trend-up';\n return invert ? 'trend-up' : 'trend-down';\n }\n\n getTrendIcon(): string {\n const direction = this.props.trend?.direction || 'neutral';\n if (direction === 'up') return 'trending-up';\n if (direction === 'down') return 'trending-down';\n return 'remove';\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { IonIcon, IonButton, IonPopover, IonList, IonItem, IonLabel } from '@ionic/angular/standalone';\nimport { AvatarComponent } from '../../atoms/avatar/avatar.component';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { Subscription } from 'rxjs';\nimport { addIcons } from 'ionicons';\nimport {\n ellipsisHorizontal,\n checkmarkCircle,\n chatbubbleOutline,\n heartOutline,\n heart,\n thumbsUpOutline,\n thumbsUp,\n happyOutline,\n happy,\n sadOutline,\n sad,\n chevronDown,\n chevronUp,\n pin,\n pencil,\n trash,\n flag,\n share,\n} from 'ionicons/icons';\nimport {\n CommentMetadata,\n CommentAuthor,\n CommentReaction,\n CommentAction,\n CommentMenuItem,\n CommentAuthorClickEvent,\n CommentReactionClickEvent,\n CommentActionClickEvent,\n CommentMenuItemClickEvent,\n CommentLoadMoreEvent,\n} from './types';\n\naddIcons({\n ellipsisHorizontal,\n checkmarkCircle,\n chatbubbleOutline,\n heartOutline,\n heart,\n thumbsUpOutline,\n thumbsUp,\n happyOutline,\n happy,\n sadOutline,\n sad,\n chevronDown,\n chevronUp,\n pin,\n pencil,\n trash,\n flag,\n share,\n});\n\n@Component({\n selector: 'val-comment',\n standalone: true,\n imports: [\n CommonModule,\n IonIcon,\n IonButton,\n IonPopover,\n IonList,\n IonItem,\n IonLabel,\n AvatarComponent,\n ],\n template: `\n <div\n class=\"comment\"\n [class.highlighted]=\"props.highlighted\"\n [class.pinned]=\"props.pinned\"\n [class.collapsed]=\"props.collapsed\"\n [style.--depth]=\"props.depth || 0\"\n >\n @if (props.pinned) {\n <div class=\"pinned-indicator\">\n <ion-icon name=\"pin\"></ion-icon>\n <span>Pinned</span>\n </div>\n }\n\n <div class=\"comment-main\">\n <div class=\"comment-avatar\" (click)=\"onAuthorClick()\">\n @if (props.author.avatar) {\n <val-avatar [props]=\"props.author.avatar\"></val-avatar>\n } @else {\n <div class=\"avatar-placeholder\">\n {{ getInitials(props.author.name) }}\n </div>\n }\n </div>\n\n <div class=\"comment-body\">\n <div class=\"comment-header\">\n <div class=\"author-info\" (click)=\"onAuthorClick()\">\n <span class=\"author-name\">{{ props.author.name }}</span>\n @if (props.author.verified) {\n <ion-icon name=\"checkmark-circle\" class=\"verified-badge\"></ion-icon>\n }\n @if (props.author.username) {\n <span class=\"author-username\">@{{ props.author.username }}</span>\n }\n </div>\n\n <div class=\"comment-meta\">\n <span class=\"timestamp\">{{ formatTimestamp(props.timestamp) }}</span>\n @if (props.edited) {\n <span class=\"edited-label\">(edited)</span>\n }\n </div>\n\n @if (props.menuItems && props.menuItems.length > 0) {\n <ion-button\n fill=\"clear\"\n size=\"small\"\n class=\"more-button\"\n [id]=\"'menu-trigger-' + props.token\"\n >\n <ion-icon name=\"ellipsis-horizontal\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n <ion-popover\n [trigger]=\"'menu-trigger-' + props.token\"\n [dismissOnSelect]=\"true\"\n >\n <ng-template>\n <ion-list>\n @for (item of props.menuItems; track item.token) {\n @if (item.dividerBefore) {\n <div class=\"menu-divider\"></div>\n }\n <ion-item\n [button]=\"true\"\n [detail]=\"false\"\n [disabled]=\"item.disabled\"\n (click)=\"onMenuItemClick(item)\"\n >\n @if (item.icon) {\n <ion-icon\n [name]=\"item.icon\"\n slot=\"start\"\n [color]=\"item.color\"\n ></ion-icon>\n }\n <ion-label [color]=\"item.color\">\n {{ getMenuItemLabel(item) }}\n </ion-label>\n </ion-item>\n }\n </ion-list>\n </ng-template>\n </ion-popover>\n }\n </div>\n\n @if (!props.collapsed) {\n <div\n class=\"comment-content\"\n [innerHTML]=\"processContent(displayContent)\"\n ></div>\n\n @if (props.reactions && props.reactions.length > 0) {\n <div class=\"comment-reactions\">\n @for (reaction of props.reactions; track reaction.token) {\n <button\n class=\"reaction-button\"\n [class.active]=\"reaction.active\"\n [style.--reaction-color]=\"getReactionColor(reaction)\"\n (click)=\"onReactionClick(reaction)\"\n >\n <ion-icon [name]=\"reaction.icon\"></ion-icon>\n @if (reaction.count > 0) {\n <span class=\"reaction-count\">{{ formatCount(reaction.count) }}</span>\n }\n </button>\n }\n </div>\n }\n\n @if (props.actions && props.actions.length > 0) {\n <div class=\"comment-actions\">\n @for (action of props.actions; track action.token) {\n <ion-button\n fill=\"clear\"\n size=\"small\"\n [color]=\"action.color || 'medium'\"\n [disabled]=\"action.disabled\"\n (click)=\"onActionClick(action)\"\n >\n @if (action.icon) {\n <ion-icon [name]=\"action.icon\" slot=\"start\"></ion-icon>\n }\n {{ getActionLabel(action) }}\n </ion-button>\n }\n </div>\n }\n } @else {\n <button class=\"expand-button\" (click)=\"onToggleCollapse()\">\n <ion-icon name=\"chevron-down\"></ion-icon>\n <span>Show comment</span>\n </button>\n }\n </div>\n </div>\n\n @if (!props.collapsed && hasChildren()) {\n <div class=\"comment-children\">\n @if (props.collapsed) {\n <button class=\"collapse-button\" (click)=\"onToggleCollapse()\">\n <ion-icon name=\"chevron-up\"></ion-icon>\n <span>Hide replies</span>\n </button>\n }\n\n @if (canShowChildren()) {\n @for (child of props.children; track child.token) {\n <val-comment\n [props]=\"getChildProps(child)\"\n (authorClick)=\"authorClick.emit($event)\"\n (reactionClick)=\"reactionClick.emit($event)\"\n (actionClick)=\"actionClick.emit($event)\"\n (menuItemClick)=\"menuItemClick.emit($event)\"\n (loadMoreClick)=\"loadMoreClick.emit($event)\"\n (collapseToggle)=\"collapseToggle.emit($event)\"\n ></val-comment>\n }\n\n @if (hasMoreReplies()) {\n <button class=\"load-more-button\" (click)=\"onLoadMoreClick()\">\n <ion-icon name=\"chatbubble-outline\"></ion-icon>\n <span>Load {{ getRemainingCount() }} more replies</span>\n </button>\n }\n } @else {\n <button class=\"view-replies-button\" (click)=\"onLoadMoreClick()\">\n <ion-icon name=\"chatbubble-outline\"></ion-icon>\n <span>View {{ props.replyCount || props.children?.length }} replies</span>\n </button>\n }\n </div>\n }\n </div>\n `,\n styleUrls: ['./comment.component.scss'],\n})\n/**\n * val-comment\n *\n * A versatile comment component for forums, reviews, and social media.\n * Supports author info, reactions, actions, nested replies, and more.\n *\n * @example Basic comment\n * <val-comment [props]=\"{\n * token: '1',\n * author: { name: 'John Doe', username: 'johnd' },\n * content: 'This is a great post!',\n * timestamp: '2 hours ago'\n * }\"></val-comment>\n *\n * @example With reactions and actions\n * <val-comment [props]=\"{\n * token: '1',\n * author: { name: 'Jane', avatar: avatarProps, verified: true },\n * content: 'Amazing content! Check out https://example.com',\n * timestamp: new Date(),\n * reactions: [\n * { token: 'like', icon: 'heart-outline', count: 42, active: false }\n * ],\n * actions: [\n * { token: 'reply', label: 'Reply', icon: 'chatbubble-outline' }\n * ],\n * menuItems: [\n * { token: 'edit', label: 'Edit', icon: 'pencil' },\n * { token: 'delete', label: 'Delete', icon: 'trash', color: 'danger' }\n * ]\n * }\"></val-comment>\n *\n * @input props: CommentMetadata - Configuration for the comment\n * @output authorClick - Emits when author name/avatar is clicked\n * @output reactionClick - Emits when a reaction is clicked\n * @output actionClick - Emits when an action button is clicked\n * @output menuItemClick - Emits when a menu item is clicked\n * @output loadMoreClick - Emits when load more replies is clicked\n * @output collapseToggle - Emits when comment is collapsed/expanded\n */\nexport class CommentComponent implements OnInit, OnDestroy {\n @Input() props: CommentMetadata;\n\n @Output() authorClick = new EventEmitter<CommentAuthorClickEvent>();\n @Output() reactionClick = new EventEmitter<CommentReactionClickEvent>();\n @Output() actionClick = new EventEmitter<CommentActionClickEvent>();\n @Output() menuItemClick = new EventEmitter<CommentMenuItemClickEvent>();\n @Output() loadMoreClick = new EventEmitter<CommentLoadMoreEvent>();\n @Output() collapseToggle = new EventEmitter<{ token: string; collapsed: boolean }>();\n\n displayContent: string = '';\n private langSubscription: Subscription | null = null;\n private langService = inject(LangService);\n\n ngOnInit(): void {\n this.updateDisplayContent();\n\n if (this.props.contentKey && this.props.contentClass) {\n this.langSubscription = this.langService.currentLang$.subscribe(() => {\n this.updateDisplayContent();\n });\n }\n }\n\n ngOnDestroy(): void {\n this.langSubscription?.unsubscribe();\n }\n\n private updateDisplayContent(): void {\n if (this.props.contentKey && this.props.contentClass) {\n this.displayContent =\n this.langService.getText(\n this.props.contentClass,\n this.props.contentKey,\n this.props.contentFallback || this.props.content\n );\n } else {\n this.displayContent = this.props.content;\n }\n }\n\n getInitials(name: string): string {\n return name\n .split(' ')\n .map((n) => n[0])\n .join('')\n .substring(0, 2)\n .toUpperCase();\n }\n\n formatTimestamp(timestamp: string | Date): string {\n if (typeof timestamp === 'string') {\n return timestamp;\n }\n\n const now = new Date();\n const diff = now.getTime() - timestamp.getTime();\n const seconds = Math.floor(diff / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n\n if (seconds < 60) return 'Just now';\n if (minutes < 60) return `${minutes}m ago`;\n if (hours < 24) return `${hours}h ago`;\n if (days < 7) return `${days}d ago`;\n\n return timestamp.toLocaleDateString();\n }\n\n formatCount(count: number): string {\n if (count >= 1000000) {\n return (count / 1000000).toFixed(1).replace(/\\.0$/, '') + 'M';\n }\n if (count >= 1000) {\n return (count / 1000).toFixed(1).replace(/\\.0$/, '') + 'K';\n }\n return count.toString();\n }\n\n processContent(content: string): string {\n if (this.props.autoLinkify === false) {\n return this.escapeHtml(content);\n }\n\n // Escape HTML first\n let processed = this.escapeHtml(content);\n\n // URL regex\n const urlRegex = /(https?:\\/\\/[^\\s<]+[^\\s<.,;:!?)\\]'\"])/gi;\n processed = processed.replace(\n urlRegex,\n '<a href=\"$1\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"comment-link\">$1</a>'\n );\n\n // @mentions\n const mentionRegex = /@(\\w+)/g;\n processed = processed.replace(\n mentionRegex,\n '<span class=\"comment-mention\">@$1</span>'\n );\n\n // #hashtags\n const hashtagRegex = /#(\\w+)/g;\n processed = processed.replace(\n hashtagRegex,\n '<span class=\"comment-hashtag\">#$1</span>'\n );\n\n // Preserve line breaks\n processed = processed.replace(/\\n/g, '<br>');\n\n return processed;\n }\n\n private escapeHtml(text: string): string {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n\n getReactionColor(reaction: CommentReaction): string {\n if (reaction.active && reaction.activeColor) {\n return `var(--ion-color-${reaction.activeColor})`;\n }\n if (reaction.active) {\n return 'var(--ion-color-primary)';\n }\n if (reaction.color) {\n return `var(--ion-color-${reaction.color})`;\n }\n return 'var(--ion-color-medium)';\n }\n\n getActionLabel(action: CommentAction): string {\n if (action.contentKey && action.contentClass) {\n return this.langService.getText(\n action.contentClass,\n action.contentKey,\n action.contentFallback || action.label\n );\n }\n return action.label;\n }\n\n getMenuItemLabel(item: CommentMenuItem): string {\n if (item.contentKey && item.contentClass) {\n return this.langService.getText(\n item.contentClass,\n item.contentKey,\n item.contentFallback || item.label\n );\n }\n return item.label;\n }\n\n hasChildren(): boolean {\n return !!(this.props.children && this.props.children.length > 0) ||\n !!(this.props.replyCount && this.props.replyCount > 0);\n }\n\n canShowChildren(): boolean {\n const maxDepth = this.props.maxDepth ?? 3;\n const currentDepth = this.props.depth ?? 0;\n return currentDepth < maxDepth && !!(this.props.children && this.props.children.length > 0);\n }\n\n getChildProps(child: CommentMetadata): CommentMetadata {\n return {\n ...child,\n depth: (this.props.depth ?? 0) + 1,\n maxDepth: this.props.maxDepth ?? 3,\n };\n }\n\n hasMoreReplies(): boolean {\n if (!this.props.replyCount) return false;\n const loadedCount = this.props.children?.length ?? 0;\n return this.props.replyCount > loadedCount;\n }\n\n getRemainingCount(): number {\n const total = this.props.replyCount ?? 0;\n const loaded = this.props.children?.length ?? 0;\n return total - loaded;\n }\n\n onAuthorClick(): void {\n this.authorClick.emit({\n author: this.props.author,\n commentToken: this.props.token,\n });\n }\n\n onReactionClick(reaction: CommentReaction): void {\n this.reactionClick.emit({\n reaction,\n commentToken: this.props.token,\n isActive: !reaction.active,\n });\n }\n\n onActionClick(action: CommentAction): void {\n this.actionClick.emit({\n action,\n commentToken: this.props.token,\n });\n }\n\n onMenuItemClick(item: CommentMenuItem): void {\n this.menuItemClick.emit({\n menuItem: item,\n commentToken: this.props.token,\n });\n }\n\n onLoadMoreClick(): void {\n this.loadMoreClick.emit({\n commentToken: this.props.token,\n currentCount: this.props.children?.length ?? 0,\n });\n }\n\n onToggleCollapse(): void {\n this.collapseToggle.emit({\n token: this.props.token,\n collapsed: !this.props.collapsed,\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { IonicModule, IonModal } from '@ionic/angular';\nimport { Subscription } from 'rxjs';\nimport { IconService } from '../../../services/icons.service';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { replaceSpecialChars } from '../../../shared/utils/text';\nimport { InputMetadata, InputOption } from '../../types';\nimport { SearchbarComponent } from '../searchbar/searchbar.component';\n\n@Component({\n selector: 'val-multi-select-search',\n standalone: true,\n imports: [CommonModule, IonicModule, FormsModule, SearchbarComponent, ReactiveFormsModule],\n template: `\n <ion-input\n type=\"text\"\n [value]=\"displayValue\"\n [placeholder]=\"props?.placeholder || placeholder\"\n readonly\n (mousedown)=\"preventDefaultBehavior($event)\"\n />\n\n <ion-input style=\"position: absolute;\" [formControl]=\"props.control\" type=\"hidden\"></ion-input>\n\n <ion-modal\n #modal\n trigger=\"open-modal\"\n [initialBreakpoint]=\"1\"\n [breakpoints]=\"[0, 0.5, 0.75, 1]\"\n (didDismiss)=\"cancelModal()\"\n >\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-title>{{ label }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"cancelModal()\">Cerrar</ion-button>\n </ion-buttons>\n </ion-toolbar>\n <ion-toolbar>\n <val-searchbar (filterEvent)=\"onFilter($event)\" (focusEvent)=\"onFocus()\" (blurEvent)=\"onBlur()\" />\n </ion-toolbar>\n </ion-header>\n <ion-content>\n <!-- Action buttons for multi-select -->\n <div class=\"actions-container\" style=\"padding: 16px; border-bottom: 1px solid var(--ion-color-light-shade);\">\n <ion-button \n fill=\"clear\" \n size=\"small\" \n (click)=\"selectAll()\"\n [disabled]=\"filteredItems.length === 0\"\n >\n Seleccionar todos\n </ion-button>\n <ion-button \n fill=\"clear\" \n size=\"small\" \n color=\"medium\" \n (click)=\"clearAll()\"\n [disabled]=\"selectedItems.length === 0\"\n >\n Limpiar\n </ion-button>\n </div>\n\n <ion-list>\n <ion-item *ngFor=\"let item of filteredItems\" button (click)=\"selectItem(item)\" detail=\"false\">\n <ion-checkbox\n slot=\"start\"\n [checked]=\"isItemSelected(item)\"\n ></ion-checkbox>\n <ion-label>{{ item[labelProperty] }}</ion-label>\n </ion-item>\n <ion-item *ngIf=\"filteredItems.length === 0\" lines=\"none\">\n <ion-label color=\"dark\">No se encontraron resultados</ion-label>\n </ion-item>\n </ion-list>\n </ion-content>\n <ion-footer>\n <ion-toolbar>\n <ion-button expand=\"full\" (click)=\"applyAndClose()\">\n Aplicar\n </ion-button>\n </ion-toolbar>\n </ion-footer>\n </ng-template>\n </ion-modal>\n `,\n styles: [\n `\n ion-header {\n padding: 8px 8px 0px 8px;\n }\n .actions-container {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n `,\n ],\n})\nexport class MultiSelectSearchComponent implements OnChanges, OnDestroy {\n @ViewChild('modal') modal!: IonModal;\n\n @Input() label: string;\n @Input() labelProperty: string = 'name';\n @Input() valueProperty: string = 'id';\n @Input() placeholder: string;\n\n private langService = inject(LangService);\n\n constructor() {\n this.label = this.langService.getText('_global', 'selectOptions', 'Seleccionar opciones');\n this.placeholder = this.langService.getText('_global', 'selectOptions', 'Seleccione opciones');\n }\n\n @Input() props: InputMetadata;\n\n icon = inject(IconService);\n private changeDetector = inject(ChangeDetectorRef);\n\n searchTerm: string = '';\n filteredItems: InputOption[] = [];\n selectedItems: InputOption[] = [];\n displayValue: string = '';\n\n private previousOptions: any[] = [];\n private isProcessingChanges = false;\n private valueChangesSubscription?: Subscription;\n\n ngOnInit() {\n this.applyDefaultValue();\n this.initializeItems();\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n this.subscribeToValueChanges();\n }\n\n ngOnDestroy() {\n // Limpiar suscripciones para evitar memory leaks\n if (this.valueChangesSubscription) {\n this.valueChangesSubscription.unsubscribe();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // Evitar bucles infinitos\n if (this.isProcessingChanges) {\n return;\n }\n\n // Cuando cambia props o props.options\n if (changes['props']) {\n try {\n this.isProcessingChanges = true;\n\n // Desuscribirse del antiguo control si existe\n if (this.valueChangesSubscription) {\n this.valueChangesSubscription.unsubscribe();\n }\n\n if (this.props?.options) {\n // Verificar si las opciones han cambiado realmente\n const optionsChanged = !this.areOptionsEqual(this.previousOptions, this.props.options);\n\n if (optionsChanged) {\n this.previousOptions = [...this.props.options];\n this.initializeItems();\n }\n }\n\n // Sincronizar con el nuevo control si existe\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n\n // Suscribirse al nuevo control\n this.subscribeToValueChanges();\n } finally {\n this.isProcessingChanges = false;\n }\n }\n }\n\n ionViewWillEnter(): void {\n if (this.isProcessingChanges) {\n return;\n }\n\n try {\n this.isProcessingChanges = true;\n this.initializeItems();\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n this.subscribeToValueChanges();\n } finally {\n this.isProcessingChanges = false;\n }\n }\n\n // Suscribirse a cambios en el FormControl\n private subscribeToValueChanges() {\n if (!this.props?.control) return;\n\n this.valueChangesSubscription = this.props.control.valueChanges.subscribe(value => {\n if (this.isProcessingChanges) return;\n\n try {\n this.isProcessingChanges = true;\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n } finally {\n this.isProcessingChanges = false;\n }\n });\n }\n\n // Compara si dos arrays de opciones son iguales\n private areOptionsEqual(prevOptions: any[], newOptions: any[]): boolean {\n if (prevOptions === newOptions) return true;\n if (!prevOptions || !newOptions) return prevOptions === newOptions;\n if (prevOptions.length !== newOptions.length) return false;\n for (let i = 0; i < prevOptions.length; i++) {\n if (prevOptions[i][this.valueProperty] !== newOptions[i][this.valueProperty]) {\n return false;\n }\n }\n return true;\n }\n\n private initializeItems(): void {\n this.filteredItems = this.props?.options || [];\n }\n\n private syncControlValueWithSelectedItems(): void {\n if (!this.props?.control) {\n this.selectedItems = [];\n return;\n }\n const controlValue = this.props.control.value;\n if (controlValue === null || controlValue === undefined || controlValue === '') {\n this.selectedItems = [];\n return;\n }\n\n // Parse comma-separated values for multi-select\n const values = typeof controlValue === 'string' \n ? controlValue.split(',').map(v => v.trim()).filter(v => v !== '')\n : Array.isArray(controlValue) ? controlValue : [controlValue];\n\n if (this.props.options && this.props.options.length > 0) {\n const map = new Map(this.props.options.map(opt => [String(opt[this.valueProperty]), opt]));\n this.selectedItems = values.map(val => map.get(String(val))).filter(Boolean);\n } else {\n this.selectedItems = [];\n }\n }\n\n private applyDefaultValue(): void {\n applyDefaultValueToControl(this.props);\n }\n\n onFilter(event) {\n // If no search term, show all options\n if (!event || event.trim() === '') {\n this.filteredItems = this.props?.options ? [...this.props.options] : [];\n this.changeDetector.detectChanges();\n return;\n }\n\n // If no options, nothing to filter\n if (!this.props?.options || this.props.options.length === 0) {\n this.filteredItems = [];\n this.changeDetector.detectChanges();\n return;\n }\n\n const search = replaceSpecialChars(event.toLowerCase());\n this.filteredItems = this.props.options.filter(element => {\n const label = element[this.labelProperty]\n ? replaceSpecialChars(String(element[this.labelProperty]).toLowerCase())\n : '';\n const value = element[this.valueProperty]\n ? replaceSpecialChars(String(element[this.valueProperty]).toLowerCase())\n : '';\n return label.includes(search) || value.includes(search);\n });\n this.changeDetector.detectChanges();\n }\n\n onFocus() {\n console.log('onFocus');\n }\n\n onBlur() {\n console.log('onBlur');\n }\n\n openModal() {\n if (this.modal) {\n this.modal.present();\n }\n }\n\n preventDefaultBehavior(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.openModal();\n }\n\n cancelModal() {\n // Reset filter and show all options when closing modal\n this.searchTerm = '';\n this.filteredItems = this.props?.options ? [...this.props.options] : [];\n this.changeDetector.detectChanges();\n if (this.modal) {\n this.modal.dismiss();\n }\n }\n\n selectItem(item: any) {\n // Multi-select logic: toggle selection\n const index = this.selectedItems.findIndex(\n selectedItem => selectedItem[this.valueProperty] === item[this.valueProperty]\n );\n\n if (index === -1) {\n // Add to selection\n this.selectedItems.push(item);\n } else {\n // Remove from selection\n this.selectedItems.splice(index, 1);\n }\n\n this.updateDisplayValue();\n this.applyChanges();\n }\n\n selectAll(): void {\n // Add all filtered items that aren't already selected\n this.filteredItems.forEach(item => {\n const isAlreadySelected = this.selectedItems.some(\n selectedItem => selectedItem[this.valueProperty] === item[this.valueProperty]\n );\n if (!isAlreadySelected) {\n this.selectedItems.push(item);\n }\n });\n\n this.updateDisplayValue();\n this.applyChanges();\n }\n\n clearAll(): void {\n this.selectedItems = [];\n this.updateDisplayValue();\n this.applyChanges();\n }\n\n isItemSelected(item: any): boolean {\n return this.selectedItems.some(selectedItem => selectedItem[this.valueProperty] === item[this.valueProperty]);\n }\n\n updateDisplayValue() {\n if (this.selectedItems.length === 0) {\n this.displayValue = '';\n return;\n }\n\n if (this.selectedItems.length === 1) {\n this.displayValue = this.selectedItems[0][this.labelProperty];\n } else {\n this.displayValue = `${this.selectedItems.length} elementos seleccionados`;\n }\n }\n\n applyChanges() {\n if (!this.props?.control) {\n return;\n }\n\n try {\n this.isProcessingChanges = true;\n\n // Convert selected items to comma-separated string of values\n const selectedValues = this.selectedItems.map(item => String(item[this.valueProperty]));\n const value = selectedValues.join(',');\n\n this.props.control.setValue(value);\n this.props.control.markAsDirty();\n this.props.control.updateValueAndValidity();\n } finally {\n this.isProcessingChanges = false;\n }\n }\n\n applyAndClose() {\n this.applyChanges();\n this.cancelModal();\n }\n\n // Método público para reiniciar el componente\n reset() {\n this.selectedItems = [];\n this.displayValue = '';\n if (this.props?.control) {\n this.props.control.setValue('');\n }\n this.changeDetector.detectChanges();\n }\n}","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\nexport interface QuoteBoxMetadata {\n /** Contenido de la cita */\n content: string;\n /** Autor de la cita */\n author?: string;\n /** Fuente de la cita (libro, artículo, etc.) */\n source?: string;\n /** Tamaño del texto */\n size?: 'small' | 'medium' | 'large' | 'xlarge';\n /** Color de la cita */\n color?: 'primary' | 'secondary' | 'tertiary' | 'success' | 'warning' | 'danger' | 'dark' | 'light' | 'medium';\n /** Color del autor y fuente */\n authorColor?: 'primary' | 'secondary' | 'tertiary' | 'success' | 'warning' | 'danger' | 'dark' | 'light' | 'medium';\n /** Alineación del contenido */\n alignment?: 'left' | 'center' | 'right';\n /** Mostrar comillas decorativas */\n showQuoteMark?: boolean;\n /** Texto en negrita */\n bold?: boolean;\n}\n\n@Component({\n selector: 'quote-box',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div\n class=\"quote-box\"\n [ngClass]=\"{\n 'quote-box--primary': props.color === 'primary',\n 'quote-box--secondary': props.color === 'secondary',\n 'quote-box--tertiary': props.color === 'tertiary',\n 'quote-box--success': props.color === 'success',\n 'quote-box--warning': props.color === 'warning',\n 'quote-box--danger': props.color === 'danger',\n 'quote-box--dark': props.color === 'dark',\n 'quote-box--light': props.color === 'light',\n 'quote-box--medium': props.color === 'medium',\n 'quote-box--left': props.alignment === 'left',\n 'quote-box--center': props.alignment === 'center' || !props.alignment,\n 'quote-box--right': props.alignment === 'right',\n }\"\n >\n <!-- Comillas decorativas -->\n <div\n *ngIf=\"props.showQuoteMark !== false\"\n class=\"quote-box__quote-mark\"\n [ngClass]=\"{\n 'quote-box__quote-mark--small': props.size === 'small',\n 'quote-box__quote-mark--medium': props.size === 'medium' || !props.size,\n 'quote-box__quote-mark--large': props.size === 'large',\n 'quote-box__quote-mark--xlarge': props.size === 'xlarge',\n }\"\n >\n \"\n </div>\n\n <!-- Contenido de la cita -->\n <div\n class=\"quote-box__content\"\n [ngClass]=\"{\n 'quote-box__content--small': props.size === 'small',\n 'quote-box__content--medium': props.size === 'medium' || !props.size,\n 'quote-box__content--large': props.size === 'large',\n 'quote-box__content--xlarge': props.size === 'xlarge',\n 'quote-box__content--bold': props.bold,\n }\"\n >\n {{ props.content }}\n </div>\n\n <!-- Autor y fuente -->\n <div\n *ngIf=\"props.author\"\n class=\"quote-box__attribution\"\n [ngClass]=\"{\n 'quote-box__attribution--small': props.size === 'small',\n 'quote-box__attribution--medium': props.size === 'medium' || !props.size,\n 'quote-box__attribution--large': props.size === 'large',\n 'quote-box__attribution--xlarge': props.size === 'xlarge',\n 'quote-box__attribution--bold': props.bold,\n 'quote-box__attribution--primary': props.authorColor === 'primary',\n 'quote-box__attribution--secondary': props.authorColor === 'secondary',\n 'quote-box__attribution--tertiary': props.authorColor === 'tertiary',\n 'quote-box__attribution--success': props.authorColor === 'success',\n 'quote-box__attribution--warning': props.authorColor === 'warning',\n 'quote-box__attribution--danger': props.authorColor === 'danger',\n 'quote-box__attribution--dark': props.authorColor === 'dark',\n 'quote-box__attribution--light': props.authorColor === 'light',\n 'quote-box__attribution--color-medium': props.authorColor === 'medium',\n }\"\n >\n {{ props.author }}<span *ngIf=\"props.source\">, {{ props.source }}</span>\n </div>\n </div>\n `,\n styleUrls: ['./quote-box.component.scss'],\n})\nexport class QuoteBoxComponent {\n @Input() props!: QuoteBoxMetadata;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit, OnDestroy, inject } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonTextarea, IonNote } from '@ionic/angular/standalone';\nimport { Subscription } from 'rxjs';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { ComponentStates } from '../../types';\nimport { TextareaInputMetadata } from './types';\n\n@Component({\n selector: 'val-textarea-input',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, IonTextarea, IonNote],\n template: `\n <div class=\"textarea-container\" [class]=\"props.cssClass\" [class.has-error]=\"hasError\">\n <ion-textarea\n [formControl]=\"props.control\"\n [placeholder]=\"getPlaceholder()\"\n [label]=\"getLabel()\"\n [labelPlacement]=\"props.labelPlacement || 'stacked'\"\n [fill]=\"props.fill || 'outline'\"\n [color]=\"hasError ? 'danger' : props.color\"\n [rows]=\"props.rows || 4\"\n [autoGrow]=\"props.autoGrow ?? false\"\n [maxlength]=\"props.maxLength\"\n [minlength]=\"props.minLength\"\n [disabled]=\"props.state === states.DISABLED\"\n [readonly]=\"props.state === states.WORKING\"\n [spellcheck]=\"props.spellcheck ?? true\"\n [autocapitalize]=\"props.autocapitalize || 'sentences'\"\n [inputmode]=\"props.inputMode || 'text'\"\n [wrap]=\"props.wrap || 'soft'\"\n [counter]=\"props.showCounter && !!props.maxLength\"\n [counterFormatter]=\"counterFormatter\"\n [class.no-resize]=\"props.disableResize\"\n ></ion-textarea>\n\n @if (props.showCounter && props.maxLength && props.counterFormat === 'remaining') {\n <div class=\"char-counter remaining\">\n {{ getRemainingChars() }} {{ getRemainingLabel() }}\n </div>\n }\n\n @if (props.hint && !hasError) {\n <ion-note class=\"hint\">{{ getHint() }}</ion-note>\n }\n\n @if (hasError && props.showErrors) {\n <ion-note class=\"error-message\" color=\"danger\">\n {{ getErrorMessage() }}\n </ion-note>\n }\n </div>\n `,\n styleUrls: ['./textarea-input.component.scss'],\n})\n/**\n * val-textarea-input\n *\n * A textarea input field with character counter, auto-grow, and validation support.\n *\n * @example Basic usage\n * ```html\n * <val-textarea-input\n * [props]=\"{\n * control: messageControl,\n * placeholder: 'Enter your message',\n * rows: 4\n * }\"\n * ></val-textarea-input>\n * ```\n *\n * @example With counter and validation\n * ```html\n * <val-textarea-input\n * [props]=\"{\n * control: bioControl,\n * label: 'Bio',\n * placeholder: 'Tell us about yourself',\n * maxLength: 500,\n * showCounter: true,\n * counterFormat: 'remaining',\n * autoGrow: true,\n * showErrors: true,\n * errors: { maxlength: 'Bio is too long' }\n * }\"\n * ></val-textarea-input>\n * ```\n */\nexport class TextareaInputComponent implements OnInit, OnDestroy {\n @Input() props: TextareaInputMetadata;\n\n states = ComponentStates;\n\n private langSubscription: Subscription | null = null;\n private langService = inject(LangService);\n\n ngOnInit(): void {\n // Apply default value if configured\n if (this.props?.withDefault || this.props?.value) {\n const defaultValue =\n typeof this.props.withDefault === 'string' ? this.props.withDefault : this.props.value || '';\n if (this.props.control && !this.props.control.value) {\n this.props.control.setValue(defaultValue);\n }\n }\n\n // Subscribe to language changes for reactive content\n if (this.hasReactiveContent()) {\n this.langSubscription = this.langService.currentLang$.subscribe(() => {\n // Trigger change detection for labels\n });\n }\n }\n\n ngOnDestroy(): void {\n this.langSubscription?.unsubscribe();\n }\n\n private hasReactiveContent(): boolean {\n return !!(\n this.props.contentClass &&\n (this.props.labelContentKey || this.props.placeholderContentKey || this.props.hintContentKey)\n );\n }\n\n getLabel(): string {\n if (this.props.labelContentKey && this.props.contentClass) {\n return this.langService.getText(this.props.contentClass, this.props.labelContentKey, this.props.label || '');\n }\n return this.props.label || '';\n }\n\n getPlaceholder(): string {\n if (this.props.placeholderContentKey && this.props.contentClass) {\n return this.langService.getText(\n this.props.contentClass,\n this.props.placeholderContentKey,\n this.props.placeholder || ''\n );\n }\n return this.props.placeholder || '';\n }\n\n getHint(): string {\n if (this.props.hintContentKey && this.props.contentClass) {\n return this.langService.getText(this.props.contentClass, this.props.hintContentKey, this.props.hint || '');\n }\n return this.props.hint || '';\n }\n\n get hasError(): boolean {\n return !!(this.props.control?.touched && this.props.control?.invalid);\n }\n\n getErrorMessage(): string {\n if (!this.props.control?.errors || !this.props.errors) {\n return '';\n }\n\n const errorKeys = Object.keys(this.props.control.errors);\n for (const key of errorKeys) {\n if (this.props.errors[key]) {\n return this.props.errors[key];\n }\n }\n\n return '';\n }\n\n getRemainingChars(): number {\n const currentLength = this.props.control?.value?.length || 0;\n return (this.props.maxLength || 0) - currentLength;\n }\n\n getRemainingLabel(): string {\n const remaining = this.getRemainingChars();\n return remaining === 1 ? 'character remaining' : 'characters remaining';\n }\n\n // Counter formatter for Ionic's built-in counter\n counterFormatter = (inputLength: number, maxLength: number): string => {\n return `${inputLength}/${maxLength}`;\n };\n}\n","import { FormControl } from '@angular/forms';\nimport { Color } from '@ionic/core';\nimport { ComponentState } from '../../types';\n\n/**\n * Country code option for phone input.\n */\nexport interface CountryCode {\n /** ISO country code (e.g., 'US', 'MX', 'ES') */\n code: string;\n /** Country name */\n name: string;\n /** Dial code (e.g., '+1', '+52', '+34') */\n dialCode: string;\n /** Flag emoji (optional) */\n flag?: string;\n /** Phone number format pattern (optional) */\n format?: string;\n}\n\n/**\n * Common country codes for quick access.\n */\nexport const COMMON_COUNTRY_CODES: CountryCode[] = [\n { code: 'US', name: 'United States', dialCode: '+1', flag: '🇺🇸', format: '(XXX) XXX-XXXX' },\n { code: 'MX', name: 'México', dialCode: '+52', flag: '🇲🇽', format: 'XX XXXX XXXX' },\n { code: 'ES', name: 'España', dialCode: '+34', flag: '🇪🇸', format: 'XXX XXX XXX' },\n { code: 'AR', name: 'Argentina', dialCode: '+54', flag: '🇦🇷', format: 'XX XXXX XXXX' },\n { code: 'CO', name: 'Colombia', dialCode: '+57', flag: '🇨🇴', format: 'XXX XXX XXXX' },\n { code: 'CL', name: 'Chile', dialCode: '+56', flag: '🇨🇱', format: 'X XXXX XXXX' },\n { code: 'PE', name: 'Perú', dialCode: '+51', flag: '🇵🇪', format: 'XXX XXX XXX' },\n { code: 'BR', name: 'Brasil', dialCode: '+55', flag: '🇧🇷', format: 'XX XXXXX XXXX' },\n { code: 'GB', name: 'United Kingdom', dialCode: '+44', flag: '🇬🇧', format: 'XXXX XXXXXX' },\n { code: 'DE', name: 'Germany', dialCode: '+49', flag: '🇩🇪', format: 'XXX XXXXXXX' },\n { code: 'FR', name: 'France', dialCode: '+33', flag: '🇫🇷', format: 'X XX XX XX XX' },\n { code: 'IT', name: 'Italy', dialCode: '+39', flag: '🇮🇹', format: 'XXX XXX XXXX' },\n { code: 'CA', name: 'Canada', dialCode: '+1', flag: '🇨🇦', format: '(XXX) XXX-XXXX' },\n];\n\n/**\n * Metadata for the phone input component.\n */\nexport interface PhoneInputMetadata {\n /** Form control for the complete phone number (with country code) */\n control: FormControl<string>;\n /** Separate control for just the number (without country code) */\n numberControl?: FormControl<string>;\n /** Separate control for country code selection */\n countryControl?: FormControl<string>;\n /** Unique token for the input */\n token?: string;\n /** Display label */\n label?: string;\n /** Field name */\n name?: string;\n /** Help text */\n hint?: string;\n /** Input placeholder for phone number */\n placeholder?: string;\n /** Field state */\n state?: ComponentState;\n\n // === Country code options ===\n /** Available country codes */\n countryCodes?: CountryCode[];\n /** Default country code (ISO code, e.g., 'MX') */\n defaultCountry?: string;\n /** Show country selector */\n showCountrySelector?: boolean;\n /** Show country flag */\n showFlag?: boolean;\n /** Allow searching countries */\n searchableCountries?: boolean;\n /** Preferred countries to show at top */\n preferredCountries?: string[];\n\n // === Validation ===\n /** Validate phone format */\n validateFormat?: boolean;\n /** Custom validation pattern */\n pattern?: string;\n /** Minimum digits */\n minDigits?: number;\n /** Maximum digits */\n maxDigits?: number;\n\n // === Styling ===\n /** Component color */\n color?: Color;\n /** Fill style */\n fill?: 'outline' | 'solid';\n /** Label placement */\n labelPlacement?: 'fixed' | 'floating' | 'stacked' | 'start' | 'end';\n /** Custom CSS class */\n cssClass?: string;\n\n // === Reactive content ===\n /** Content key for reactive label */\n labelContentKey?: string;\n /** Content key for reactive placeholder */\n placeholderContentKey?: string;\n /** Content key for reactive hint */\n hintContentKey?: string;\n /** Component class name for content lookup */\n contentClass?: string;\n\n // === Validation display ===\n /** Custom error messages */\n errors?: Record<string, string>;\n /** Show validation errors */\n showErrors?: boolean;\n}\n\n/**\n * Event emitted when phone input changes.\n */\nexport interface PhoneInputChangeEvent {\n /** Complete phone number with country code */\n fullNumber: string;\n /** Phone number without country code */\n number: string;\n /** Selected country */\n country: CountryCode | null;\n /** Whether the number is valid */\n isValid: boolean;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, Output, EventEmitter, OnInit, OnDestroy, inject } from '@angular/core';\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\nimport {\n IonInput,\n IonSelect,\n IonSelectOption,\n IonNote,\n IonIcon,\n} from '@ionic/angular/standalone';\nimport { Subscription } from 'rxjs';\nimport { addIcons } from 'ionicons';\nimport { callOutline, chevronDownOutline } from 'ionicons/icons';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { ComponentStates } from '../../types';\nimport { PhoneInputMetadata, PhoneInputChangeEvent, CountryCode, COMMON_COUNTRY_CODES } from './types';\n\naddIcons({ callOutline, chevronDownOutline });\n\n@Component({\n selector: 'val-phone-input',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, IonInput, IonSelect, IonSelectOption, IonNote, IonIcon],\n template: `\n <div class=\"phone-input-container\" [class]=\"props.cssClass\" [class.has-error]=\"hasError\">\n @if (props.label) {\n <label class=\"phone-label\">{{ getLabel() }}</label>\n }\n\n <div class=\"phone-input-wrapper\" [class.disabled]=\"props.state === states.DISABLED\">\n @if (props.showCountrySelector !== false) {\n <div class=\"country-selector\">\n <ion-select\n [formControl]=\"internalCountryControl\"\n interface=\"popover\"\n [interfaceOptions]=\"{ cssClass: 'country-select-popover' }\"\n [disabled]=\"props.state === states.DISABLED\"\n (ionChange)=\"onCountryChange($event)\"\n >\n @for (country of getCountryList(); track country.code) {\n <ion-select-option [value]=\"country.code\">\n @if (props.showFlag !== false) {\n <span class=\"flag\">{{ country.flag }}</span>\n }\n {{ country.dialCode }}\n </ion-select-option>\n }\n </ion-select>\n </div>\n } @else {\n <div class=\"dial-code-display\">\n {{ getSelectedCountry()?.dialCode || '+1' }}\n </div>\n }\n\n <div class=\"number-input\">\n <ion-input\n [formControl]=\"internalNumberControl\"\n type=\"tel\"\n inputmode=\"tel\"\n [placeholder]=\"getPlaceholder()\"\n [disabled]=\"props.state === states.DISABLED\"\n [readonly]=\"props.state === states.WORKING\"\n [maxlength]=\"props.maxDigits || 15\"\n (ionInput)=\"onNumberInput($event)\"\n (ionBlur)=\"onBlur()\"\n >\n <ion-icon slot=\"start\" name=\"call-outline\" aria-hidden=\"true\"></ion-icon>\n </ion-input>\n </div>\n </div>\n\n @if (props.hint && !hasError) {\n <ion-note class=\"hint\">{{ getHint() }}</ion-note>\n }\n\n @if (hasError && props.showErrors) {\n <ion-note class=\"error-message\" color=\"danger\">\n {{ getErrorMessage() }}\n </ion-note>\n }\n </div>\n `,\n styleUrls: ['./phone-input.component.scss'],\n})\n/**\n * val-phone-input\n *\n * A phone number input with country code selector.\n *\n * @example Basic usage\n * ```html\n * <val-phone-input\n * [props]=\"{\n * control: phoneControl,\n * placeholder: 'Phone number',\n * defaultCountry: 'MX'\n * }\"\n * ></val-phone-input>\n * ```\n *\n * @example With custom countries\n * ```html\n * <val-phone-input\n * [props]=\"{\n * control: phoneControl,\n * label: 'Phone',\n * countryCodes: myCountryCodes,\n * preferredCountries: ['MX', 'US', 'ES'],\n * showErrors: true\n * }\"\n * (phoneChange)=\"onPhoneChange($event)\"\n * ></val-phone-input>\n * ```\n */\nexport class PhoneInputComponent implements OnInit, OnDestroy {\n @Input() props: PhoneInputMetadata;\n\n @Output() phoneChange = new EventEmitter<PhoneInputChangeEvent>();\n\n states = ComponentStates;\n\n internalCountryControl = new FormControl<string>('');\n internalNumberControl = new FormControl<string>('');\n\n private langSubscription: Subscription | null = null;\n private valueSubscription: Subscription | null = null;\n private langService = inject(LangService);\n\n ngOnInit(): void {\n // Set default country\n const defaultCountry = this.props.defaultCountry || 'US';\n this.internalCountryControl.setValue(defaultCountry);\n\n // Sync with external controls if provided\n if (this.props.countryControl) {\n this.internalCountryControl = this.props.countryControl;\n }\n if (this.props.numberControl) {\n this.internalNumberControl = this.props.numberControl;\n }\n\n // Parse initial value from main control\n if (this.props.control?.value) {\n this.parsePhoneNumber(this.props.control.value);\n }\n\n // Subscribe to main control changes\n this.valueSubscription = this.props.control?.valueChanges.subscribe(value => {\n if (value && !this.isInternalUpdate) {\n this.parsePhoneNumber(value);\n }\n });\n\n // Subscribe to language changes\n if (this.hasReactiveContent()) {\n this.langSubscription = this.langService.currentLang$.subscribe(() => {});\n }\n }\n\n ngOnDestroy(): void {\n this.langSubscription?.unsubscribe();\n this.valueSubscription?.unsubscribe();\n }\n\n private isInternalUpdate = false;\n\n private parsePhoneNumber(value: string): void {\n if (!value) return;\n\n // Try to extract country code\n const countries = this.getCountryList();\n for (const country of countries) {\n if (value.startsWith(country.dialCode)) {\n this.internalCountryControl.setValue(country.code);\n this.internalNumberControl.setValue(value.substring(country.dialCode.length).trim());\n return;\n }\n }\n\n // If no country code found, just set the number\n this.internalNumberControl.setValue(value);\n }\n\n private hasReactiveContent(): boolean {\n return !!(\n this.props.contentClass &&\n (this.props.labelContentKey || this.props.placeholderContentKey || this.props.hintContentKey)\n );\n }\n\n getLabel(): string {\n if (this.props.labelContentKey && this.props.contentClass) {\n return this.langService.getText(this.props.contentClass, this.props.labelContentKey, this.props.label || '');\n }\n return this.props.label || '';\n }\n\n getPlaceholder(): string {\n if (this.props.placeholderContentKey && this.props.contentClass) {\n return this.langService.getText(\n this.props.contentClass,\n this.props.placeholderContentKey,\n this.props.placeholder || ''\n );\n }\n\n // Use format from selected country if available\n const country = this.getSelectedCountry();\n if (country?.format && !this.props.placeholder) {\n return country.format;\n }\n\n return this.props.placeholder || '';\n }\n\n getHint(): string {\n if (this.props.hintContentKey && this.props.contentClass) {\n return this.langService.getText(this.props.contentClass, this.props.hintContentKey, this.props.hint || '');\n }\n return this.props.hint || '';\n }\n\n getCountryList(): CountryCode[] {\n const countries = this.props.countryCodes || COMMON_COUNTRY_CODES;\n\n // Sort by preferred countries first\n if (this.props.preferredCountries?.length) {\n const preferred = this.props.preferredCountries;\n return [\n ...countries.filter(c => preferred.includes(c.code)),\n ...countries.filter(c => !preferred.includes(c.code)),\n ];\n }\n\n return countries;\n }\n\n getSelectedCountry(): CountryCode | null {\n const code = this.internalCountryControl.value;\n return this.getCountryList().find(c => c.code === code) || null;\n }\n\n get hasError(): boolean {\n return !!(this.props.control?.touched && this.props.control?.invalid);\n }\n\n getErrorMessage(): string {\n if (!this.props.control?.errors || !this.props.errors) {\n return '';\n }\n\n const errorKeys = Object.keys(this.props.control.errors);\n for (const key of errorKeys) {\n if (this.props.errors[key]) {\n return this.props.errors[key];\n }\n }\n\n return '';\n }\n\n onCountryChange(event: CustomEvent): void {\n this.updateMainControl();\n }\n\n onNumberInput(event: CustomEvent): void {\n // Filter non-numeric characters except spaces and dashes\n let value = (event.detail.value || '').replace(/[^\\d\\s\\-]/g, '');\n\n // Apply max digits limit\n if (this.props.maxDigits) {\n const digitsOnly = value.replace(/\\D/g, '');\n if (digitsOnly.length > this.props.maxDigits) {\n value = digitsOnly.substring(0, this.props.maxDigits);\n }\n }\n\n this.internalNumberControl.setValue(value);\n this.updateMainControl();\n }\n\n onBlur(): void {\n this.props.control?.markAsTouched();\n }\n\n private updateMainControl(): void {\n const country = this.getSelectedCountry();\n const number = this.internalNumberControl.value || '';\n const fullNumber = country ? `${country.dialCode}${number}` : number;\n\n this.isInternalUpdate = true;\n this.props.control?.setValue(fullNumber);\n this.isInternalUpdate = false;\n\n // Emit change event\n const digitsOnly = number.replace(/\\D/g, '');\n const isValid = this.validateNumber(digitsOnly);\n\n this.phoneChange.emit({\n fullNumber,\n number,\n country,\n isValid,\n });\n }\n\n private validateNumber(digitsOnly: string): boolean {\n if (this.props.minDigits && digitsOnly.length < this.props.minDigits) {\n return false;\n }\n if (this.props.maxDigits && digitsOnly.length > this.props.maxDigits) {\n return false;\n }\n if (this.props.pattern) {\n const regex = new RegExp(this.props.pattern);\n return regex.test(digitsOnly);\n }\n // Default: at least 7 digits\n return digitsOnly.length >= 7;\n }\n}\n","import { FormControl } from '@angular/forms';\nimport { Color } from '@ionic/core';\nimport { ComponentState } from '../../types';\n\n/**\n * Currency configuration.\n */\nexport interface CurrencyConfig {\n /** Currency code (ISO 4217, e.g., 'USD', 'MXN', 'EUR') */\n code: string;\n /** Currency symbol (e.g., '$', '€', '£') */\n symbol: string;\n /** Currency name */\n name: string;\n /** Symbol position */\n symbolPosition?: 'prefix' | 'suffix';\n /** Decimal separator */\n decimalSeparator?: string;\n /** Thousands separator */\n thousandsSeparator?: string;\n /** Number of decimal places */\n decimalPlaces?: number;\n}\n\n/**\n * Common currency configurations.\n */\nexport const COMMON_CURRENCIES: CurrencyConfig[] = [\n { code: 'USD', symbol: '$', name: 'US Dollar', symbolPosition: 'prefix', decimalSeparator: '.', thousandsSeparator: ',', decimalPlaces: 2 },\n { code: 'MXN', symbol: '$', name: 'Mexican Peso', symbolPosition: 'prefix', decimalSeparator: '.', thousandsSeparator: ',', decimalPlaces: 2 },\n { code: 'EUR', symbol: '€', name: 'Euro', symbolPosition: 'suffix', decimalSeparator: ',', thousandsSeparator: '.', decimalPlaces: 2 },\n { code: 'GBP', symbol: '£', name: 'British Pound', symbolPosition: 'prefix', decimalSeparator: '.', thousandsSeparator: ',', decimalPlaces: 2 },\n { code: 'CAD', symbol: 'CA$', name: 'Canadian Dollar', symbolPosition: 'prefix', decimalSeparator: '.', thousandsSeparator: ',', decimalPlaces: 2 },\n { code: 'ARS', symbol: '$', name: 'Argentine Peso', symbolPosition: 'prefix', decimalSeparator: ',', thousandsSeparator: '.', decimalPlaces: 2 },\n { code: 'CLP', symbol: '$', name: 'Chilean Peso', symbolPosition: 'prefix', decimalSeparator: ',', thousandsSeparator: '.', decimalPlaces: 0 },\n { code: 'COP', symbol: '$', name: 'Colombian Peso', symbolPosition: 'prefix', decimalSeparator: ',', thousandsSeparator: '.', decimalPlaces: 2 },\n { code: 'PEN', symbol: 'S/', name: 'Peruvian Sol', symbolPosition: 'prefix', decimalSeparator: '.', thousandsSeparator: ',', decimalPlaces: 2 },\n { code: 'BRL', symbol: 'R$', name: 'Brazilian Real', symbolPosition: 'prefix', decimalSeparator: ',', thousandsSeparator: '.', decimalPlaces: 2 },\n { code: 'JPY', symbol: '¥', name: 'Japanese Yen', symbolPosition: 'prefix', decimalSeparator: '.', thousandsSeparator: ',', decimalPlaces: 0 },\n { code: 'CNY', symbol: '¥', name: 'Chinese Yuan', symbolPosition: 'prefix', decimalSeparator: '.', thousandsSeparator: ',', decimalPlaces: 2 },\n];\n\n/**\n * Metadata for the currency input component.\n */\nexport interface CurrencyInputMetadata {\n /** Form control for the numeric value (stores raw number) */\n control: FormControl<number | null>;\n /** Unique token for the input */\n token?: string;\n /** Display label */\n label?: string;\n /** Field name */\n name?: string;\n /** Help text */\n hint?: string;\n /** Input placeholder */\n placeholder?: string;\n /** Field state */\n state?: ComponentState;\n\n // === Currency options ===\n /** Currency configuration */\n currency?: CurrencyConfig;\n /** Currency code (shortcut if not providing full config) */\n currencyCode?: string;\n /** Available currencies for selector */\n currencies?: CurrencyConfig[];\n /** Show currency selector */\n showCurrencySelector?: boolean;\n /** Allow negative values */\n allowNegative?: boolean;\n\n // === Formatting ===\n /** Number of decimal places (overrides currency default) */\n decimalPlaces?: number;\n /** Show thousands separator */\n showThousandsSeparator?: boolean;\n /** Show currency symbol */\n showSymbol?: boolean;\n\n // === Validation ===\n /** Minimum value */\n min?: number;\n /** Maximum value */\n max?: number;\n\n // === Styling ===\n /** Component color */\n color?: Color;\n /** Fill style */\n fill?: 'outline' | 'solid';\n /** Label placement */\n labelPlacement?: 'fixed' | 'floating' | 'stacked' | 'start' | 'end';\n /** Custom CSS class */\n cssClass?: string;\n\n // === Reactive content ===\n /** Content key for reactive label */\n labelContentKey?: string;\n /** Content key for reactive placeholder */\n placeholderContentKey?: string;\n /** Content key for reactive hint */\n hintContentKey?: string;\n /** Component class name for content lookup */\n contentClass?: string;\n\n // === Validation display ===\n /** Custom error messages */\n errors?: Record<string, string>;\n /** Show validation errors */\n showErrors?: boolean;\n}\n\n/**\n * Event emitted when currency input changes.\n */\nexport interface CurrencyInputChangeEvent {\n /** Raw numeric value */\n value: number | null;\n /** Formatted display value */\n formattedValue: string;\n /** Selected currency */\n currency: CurrencyConfig;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, Output, EventEmitter, OnInit, OnDestroy, inject } from '@angular/core';\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\nimport { IonInput, IonSelect, IonSelectOption, IonNote } from '@ionic/angular/standalone';\nimport { Subscription } from 'rxjs';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { ComponentStates } from '../../types';\nimport { CurrencyInputMetadata, CurrencyInputChangeEvent, CurrencyConfig, COMMON_CURRENCIES } from './types';\n\n@Component({\n selector: 'val-currency-input',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, IonInput, IonSelect, IonSelectOption, IonNote],\n template: `\n <div class=\"currency-input-container\" [class]=\"props.cssClass\" [class.has-error]=\"hasError\">\n @if (props.label) {\n <label class=\"currency-label\">{{ getLabel() }}</label>\n }\n\n <div class=\"currency-input-wrapper\" [class.disabled]=\"props.state === states.DISABLED\">\n @if (props.showCurrencySelector) {\n <div class=\"currency-selector\">\n <ion-select\n [formControl]=\"currencyControl\"\n interface=\"popover\"\n [disabled]=\"props.state === states.DISABLED\"\n (ionChange)=\"onCurrencyChange($event)\"\n >\n @for (curr of getCurrencyList(); track curr.code) {\n <ion-select-option [value]=\"curr.code\">\n {{ curr.code }} ({{ curr.symbol }})\n </ion-select-option>\n }\n </ion-select>\n </div>\n } @else if (props.showSymbol !== false) {\n <div\n class=\"currency-symbol\"\n [class.prefix]=\"getSymbolPosition() === 'prefix'\"\n [class.suffix]=\"getSymbolPosition() === 'suffix'\"\n >\n @if (getSymbolPosition() === 'prefix') {\n {{ getCurrencySymbol() }}\n }\n </div>\n }\n\n <div class=\"amount-input\">\n <ion-input\n [formControl]=\"displayControl\"\n type=\"text\"\n inputmode=\"decimal\"\n [placeholder]=\"getPlaceholder()\"\n [disabled]=\"props.state === states.DISABLED\"\n [readonly]=\"props.state === states.WORKING\"\n (ionInput)=\"onInput($event)\"\n (ionBlur)=\"onBlur()\"\n (ionFocus)=\"onFocus()\"\n ></ion-input>\n </div>\n\n @if (props.showSymbol !== false && getSymbolPosition() === 'suffix' && !props.showCurrencySelector) {\n <div class=\"currency-symbol suffix\">\n {{ getCurrencySymbol() }}\n </div>\n }\n </div>\n\n @if (props.hint && !hasError) {\n <ion-note class=\"hint\">{{ getHint() }}</ion-note>\n }\n\n @if (hasError && props.showErrors) {\n <ion-note class=\"error-message\" color=\"danger\">\n {{ getErrorMessage() }}\n </ion-note>\n }\n </div>\n `,\n styleUrls: ['./currency-input.component.scss'],\n})\n/**\n * val-currency-input\n *\n * A currency/money input with formatting, symbol display, and optional currency selector.\n *\n * @example Basic usage\n * ```html\n * <val-currency-input\n * [props]=\"{\n * control: priceControl,\n * currencyCode: 'USD',\n * placeholder: '0.00'\n * }\"\n * ></val-currency-input>\n * ```\n *\n * @example With currency selector\n * ```html\n * <val-currency-input\n * [props]=\"{\n * control: amountControl,\n * label: 'Amount',\n * showCurrencySelector: true,\n * currencies: myCurrencies,\n * min: 0,\n * max: 10000,\n * showErrors: true\n * }\"\n * (currencyChange)=\"onCurrencyChange($event)\"\n * ></val-currency-input>\n * ```\n */\nexport class CurrencyInputComponent implements OnInit, OnDestroy {\n @Input() props: CurrencyInputMetadata;\n\n @Output() currencyChange = new EventEmitter<CurrencyInputChangeEvent>();\n\n states = ComponentStates;\n\n displayControl = new FormControl<string>('');\n currencyControl = new FormControl<string>('');\n\n private langSubscription: Subscription | null = null;\n private valueSubscription: Subscription | null = null;\n private langService = inject(LangService);\n private isFocused = false;\n\n ngOnInit(): void {\n // Set default currency\n const defaultCurrency = this.props.currencyCode || this.props.currency?.code || 'USD';\n this.currencyControl.setValue(defaultCurrency);\n\n // Format initial value\n if (this.props.control?.value !== null && this.props.control?.value !== undefined) {\n this.displayControl.setValue(this.formatValue(this.props.control.value));\n }\n\n // Subscribe to main control changes\n this.valueSubscription = this.props.control?.valueChanges.subscribe(value => {\n if (!this.isFocused && value !== null && value !== undefined) {\n this.displayControl.setValue(this.formatValue(value));\n }\n });\n\n // Subscribe to language changes\n if (this.hasReactiveContent()) {\n this.langSubscription = this.langService.currentLang$.subscribe(() => {});\n }\n }\n\n ngOnDestroy(): void {\n this.langSubscription?.unsubscribe();\n this.valueSubscription?.unsubscribe();\n }\n\n private hasReactiveContent(): boolean {\n return !!(\n this.props.contentClass &&\n (this.props.labelContentKey || this.props.placeholderContentKey || this.props.hintContentKey)\n );\n }\n\n getLabel(): string {\n if (this.props.labelContentKey && this.props.contentClass) {\n return this.langService.getText(this.props.contentClass, this.props.labelContentKey, this.props.label || '');\n }\n return this.props.label || '';\n }\n\n getPlaceholder(): string {\n if (this.props.placeholderContentKey && this.props.contentClass) {\n return this.langService.getText(\n this.props.contentClass,\n this.props.placeholderContentKey,\n this.props.placeholder || ''\n );\n }\n return this.props.placeholder || this.getDefaultPlaceholder();\n }\n\n getHint(): string {\n if (this.props.hintContentKey && this.props.contentClass) {\n return this.langService.getText(this.props.contentClass, this.props.hintContentKey, this.props.hint || '');\n }\n return this.props.hint || '';\n }\n\n private getDefaultPlaceholder(): string {\n const decimals = this.getDecimalPlaces();\n return decimals > 0 ? `0.${'0'.repeat(decimals)}` : '0';\n }\n\n getCurrencyList(): CurrencyConfig[] {\n return this.props.currencies || COMMON_CURRENCIES;\n }\n\n getSelectedCurrency(): CurrencyConfig {\n const code = this.currencyControl.value || 'USD';\n return (\n this.props.currency ||\n this.getCurrencyList().find(c => c.code === code) ||\n COMMON_CURRENCIES[0]\n );\n }\n\n getCurrencySymbol(): string {\n return this.getSelectedCurrency().symbol;\n }\n\n getSymbolPosition(): 'prefix' | 'suffix' {\n return this.getSelectedCurrency().symbolPosition || 'prefix';\n }\n\n getDecimalPlaces(): number {\n return this.props.decimalPlaces ?? this.getSelectedCurrency().decimalPlaces ?? 2;\n }\n\n get hasError(): boolean {\n return !!(this.props.control?.touched && this.props.control?.invalid);\n }\n\n getErrorMessage(): string {\n if (!this.props.control?.errors || !this.props.errors) {\n return '';\n }\n\n const errorKeys = Object.keys(this.props.control.errors);\n for (const key of errorKeys) {\n if (this.props.errors[key]) {\n return this.props.errors[key];\n }\n }\n\n return '';\n }\n\n onInput(event: CustomEvent): void {\n const inputValue = event.detail.value || '';\n\n // Parse the numeric value\n const numericValue = this.parseValue(inputValue);\n\n // Update the main control with raw number\n this.props.control?.setValue(numericValue);\n\n // Emit change\n this.emitChange(numericValue);\n }\n\n onFocus(): void {\n this.isFocused = true;\n\n // Show raw number for editing\n const value = this.props.control?.value;\n if (value !== null && value !== undefined) {\n this.displayControl.setValue(String(value));\n }\n }\n\n onBlur(): void {\n this.isFocused = false;\n this.props.control?.markAsTouched();\n\n // Format the display value\n const value = this.props.control?.value;\n if (value !== null && value !== undefined) {\n this.displayControl.setValue(this.formatValue(value));\n }\n }\n\n onCurrencyChange(event: CustomEvent): void {\n // Reformat with new currency settings\n const value = this.props.control?.value;\n if (value !== null && value !== undefined) {\n this.displayControl.setValue(this.formatValue(value));\n }\n\n this.emitChange(value);\n }\n\n private parseValue(input: string): number | null {\n if (!input || input.trim() === '') {\n return null;\n }\n\n const currency = this.getSelectedCurrency();\n\n // Remove currency symbol\n let cleaned = input.replace(currency.symbol, '');\n\n // Remove thousands separator\n const thousandsSep = this.props.showThousandsSeparator !== false ? (currency.thousandsSeparator || ',') : '';\n if (thousandsSep) {\n cleaned = cleaned.split(thousandsSep).join('');\n }\n\n // Normalize decimal separator\n const decimalSep = currency.decimalSeparator || '.';\n cleaned = cleaned.replace(decimalSep, '.');\n\n // Remove any remaining non-numeric characters (except minus and decimal)\n cleaned = cleaned.replace(/[^\\d.\\-]/g, '');\n\n // Handle negative\n if (!this.props.allowNegative) {\n cleaned = cleaned.replace('-', '');\n }\n\n const value = parseFloat(cleaned);\n\n if (isNaN(value)) {\n return null;\n }\n\n // Apply min/max constraints\n if (this.props.min !== undefined && value < this.props.min) {\n return this.props.min;\n }\n if (this.props.max !== undefined && value > this.props.max) {\n return this.props.max;\n }\n\n return value;\n }\n\n private formatValue(value: number): string {\n const currency = this.getSelectedCurrency();\n const decimals = this.getDecimalPlaces();\n\n // Format the number\n let formatted = value.toFixed(decimals);\n\n // Replace decimal separator\n const decimalSep = currency.decimalSeparator || '.';\n formatted = formatted.replace('.', decimalSep);\n\n // Add thousands separator\n if (this.props.showThousandsSeparator !== false) {\n const thousandsSep = currency.thousandsSeparator || ',';\n const parts = formatted.split(decimalSep);\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandsSep);\n formatted = parts.join(decimalSep);\n }\n\n return formatted;\n }\n\n private emitChange(value: number | null): void {\n this.currencyChange.emit({\n value,\n formattedValue: value !== null ? this.formatValue(value) : '',\n currency: this.getSelectedCurrency(),\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, Output, EventEmitter, OnInit, OnDestroy, inject } from '@angular/core';\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\nimport {\n IonDatetime,\n IonDatetimeButton,\n IonModal,\n IonNote,\n IonIcon,\n} from '@ionic/angular/standalone';\nimport { Subscription } from 'rxjs';\nimport { addIcons } from 'ionicons';\nimport { arrowForwardOutline, calendarOutline } from 'ionicons/icons';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { ComponentStates } from '../../types';\nimport { DateRangeInputMetadata, DateRangeChangeEvent, DateRangeValue } from './types';\n\naddIcons({ arrowForwardOutline, calendarOutline });\n\n@Component({\n selector: 'val-date-range-input',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, IonDatetime, IonDatetimeButton, IonModal, IonNote, IonIcon],\n template: `\n <div\n class=\"date-range-container\"\n [class]=\"props.cssClass\"\n [class.has-error]=\"hasError\"\n [class.horizontal]=\"props.layout !== 'vertical'\"\n [class.vertical]=\"props.layout === 'vertical'\"\n [class.disabled]=\"props.state === states.DISABLED\"\n >\n @if (props.label) {\n <label class=\"range-label\">{{ getLabel() }}</label>\n }\n\n <div class=\"date-inputs-wrapper\">\n <!-- Start Date -->\n <div class=\"date-input start-date\">\n @if (props.startLabel || props.startLabelContentKey) {\n <span class=\"date-label\">{{ getStartLabel() }}</span>\n }\n <div class=\"button-container\">\n <ion-datetime-button [datetime]=\"startDatetimeId\"></ion-datetime-button>\n </div>\n <ion-modal [keepContentsMounted]=\"true\">\n <ng-template>\n <ion-datetime\n [id]=\"startDatetimeId\"\n [formControl]=\"internalStartControl\"\n [presentation]=\"props.presentation || 'date'\"\n [locale]=\"props.locale || 'es-ES'\"\n [firstDayOfWeek]=\"props.firstDayOfWeek ?? 1\"\n [min]=\"getMinDate()\"\n [max]=\"getMaxStartDate()\"\n [showDefaultButtons]=\"true\"\n [doneText]=\"props.doneText || 'Aceptar'\"\n [cancelText]=\"props.cancelText || 'Cancelar'\"\n (ionChange)=\"onStartDateChange($event)\"\n >\n <span slot=\"title\">{{ getStartLabel() || 'Fecha inicio' }}</span>\n </ion-datetime>\n </ng-template>\n </ion-modal>\n </div>\n\n <!-- Separator -->\n <div class=\"date-separator\">\n <ion-icon name=\"arrow-forward-outline\"></ion-icon>\n </div>\n\n <!-- End Date -->\n <div class=\"date-input end-date\">\n @if (props.endLabel || props.endLabelContentKey) {\n <span class=\"date-label\">{{ getEndLabel() }}</span>\n }\n <div class=\"button-container\">\n <ion-datetime-button [datetime]=\"endDatetimeId\"></ion-datetime-button>\n </div>\n <ion-modal [keepContentsMounted]=\"true\">\n <ng-template>\n <ion-datetime\n [id]=\"endDatetimeId\"\n [formControl]=\"internalEndControl\"\n [presentation]=\"props.presentation || 'date'\"\n [locale]=\"props.locale || 'es-ES'\"\n [firstDayOfWeek]=\"props.firstDayOfWeek ?? 1\"\n [min]=\"getMinEndDate()\"\n [max]=\"getMaxDate()\"\n [showDefaultButtons]=\"true\"\n [doneText]=\"props.doneText || 'Aceptar'\"\n [cancelText]=\"props.cancelText || 'Cancelar'\"\n (ionChange)=\"onEndDateChange($event)\"\n >\n <span slot=\"title\">{{ getEndLabel() || 'Fecha fin' }}</span>\n </ion-datetime>\n </ng-template>\n </ion-modal>\n </div>\n </div>\n\n @if (showDayCount && dayCount !== null) {\n <div class=\"day-count\">\n {{ dayCount }} {{ dayCount === 1 ? 'día' : 'días' }}\n </div>\n }\n\n @if (props.hint && !hasError) {\n <ion-note class=\"hint\">{{ getHint() }}</ion-note>\n }\n\n @if (hasError && props.showErrors) {\n <ion-note class=\"error-message\" color=\"danger\">\n {{ getErrorMessage() }}\n </ion-note>\n }\n </div>\n `,\n styleUrls: ['./date-range-input.component.scss'],\n})\n/**\n * val-date-range-input\n *\n * A date range picker with start and end date selection.\n *\n * @example Basic usage\n * ```html\n * <val-date-range-input\n * [props]=\"{\n * control: dateRangeControl,\n * startLabel: 'Check-in',\n * endLabel: 'Check-out'\n * }\"\n * ></val-date-range-input>\n * ```\n *\n * @example With validation\n * ```html\n * <val-date-range-input\n * [props]=\"{\n * control: rangeControl,\n * label: 'Trip dates',\n * requireBoth: true,\n * minRangeDays: 2,\n * maxRangeDays: 30,\n * disablePastDates: true,\n * showErrors: true\n * }\"\n * (rangeChange)=\"onRangeChange($event)\"\n * ></val-date-range-input>\n * ```\n */\nexport class DateRangeInputComponent implements OnInit, OnDestroy {\n @Input() props: DateRangeInputMetadata;\n\n @Output() rangeChange = new EventEmitter<DateRangeChangeEvent>();\n\n states = ComponentStates;\n\n internalStartControl = new FormControl<string | null>(null);\n internalEndControl = new FormControl<string | null>(null);\n\n startDatetimeId = `start-datetime-${Math.random().toString(36).substr(2, 9)}`;\n endDatetimeId = `end-datetime-${Math.random().toString(36).substr(2, 9)}`;\n\n showDayCount = true;\n\n private langSubscription: Subscription | null = null;\n private valueSubscription: Subscription | null = null;\n private langService = inject(LangService);\n\n ngOnInit(): void {\n // Use provided controls or internal ones\n if (this.props.startControl) {\n this.internalStartControl = this.props.startControl;\n }\n if (this.props.endControl) {\n this.internalEndControl = this.props.endControl;\n }\n\n // Initialize from main control\n if (this.props.control?.value) {\n const value = this.props.control.value;\n if (value.start) {\n this.internalStartControl.setValue(value.start);\n }\n if (value.end) {\n this.internalEndControl.setValue(value.end);\n }\n }\n\n // Subscribe to main control changes\n this.valueSubscription = this.props.control?.valueChanges.subscribe(value => {\n if (value) {\n if (value.start !== this.internalStartControl.value) {\n this.internalStartControl.setValue(value.start);\n }\n if (value.end !== this.internalEndControl.value) {\n this.internalEndControl.setValue(value.end);\n }\n }\n });\n\n // Subscribe to language changes\n if (this.hasReactiveContent()) {\n this.langSubscription = this.langService.currentLang$.subscribe(() => {});\n }\n }\n\n ngOnDestroy(): void {\n this.langSubscription?.unsubscribe();\n this.valueSubscription?.unsubscribe();\n }\n\n private hasReactiveContent(): boolean {\n return !!(\n this.props.contentClass &&\n (this.props.labelContentKey ||\n this.props.startLabelContentKey ||\n this.props.endLabelContentKey ||\n this.props.hintContentKey)\n );\n }\n\n getLabel(): string {\n if (this.props.labelContentKey && this.props.contentClass) {\n return this.langService.getText(this.props.contentClass, this.props.labelContentKey, this.props.label || '');\n }\n return this.props.label || '';\n }\n\n getStartLabel(): string {\n if (this.props.startLabelContentKey && this.props.contentClass) {\n return this.langService.getText(\n this.props.contentClass,\n this.props.startLabelContentKey,\n this.props.startLabel || ''\n );\n }\n return this.props.startLabel || '';\n }\n\n getEndLabel(): string {\n if (this.props.endLabelContentKey && this.props.contentClass) {\n return this.langService.getText(this.props.contentClass, this.props.endLabelContentKey, this.props.endLabel || '');\n }\n return this.props.endLabel || '';\n }\n\n getHint(): string {\n if (this.props.hintContentKey && this.props.contentClass) {\n return this.langService.getText(this.props.contentClass, this.props.hintContentKey, this.props.hint || '');\n }\n return this.props.hint || '';\n }\n\n getMinDate(): string | undefined {\n if (this.props.disablePastDates) {\n return new Date().toISOString();\n }\n return this.props.min;\n }\n\n getMaxDate(): string | undefined {\n if (this.props.disableFutureDates) {\n return new Date().toISOString();\n }\n return this.props.max;\n }\n\n getMaxStartDate(): string | undefined {\n // Start date cannot be after end date\n const endDate = this.internalEndControl.value;\n if (endDate) {\n return endDate;\n }\n return this.getMaxDate();\n }\n\n getMinEndDate(): string | undefined {\n // End date cannot be before start date\n const startDate = this.internalStartControl.value;\n if (startDate) {\n return startDate;\n }\n return this.getMinDate();\n }\n\n get hasError(): boolean {\n return !!(this.props.control?.touched && this.props.control?.invalid);\n }\n\n getErrorMessage(): string {\n if (!this.props.control?.errors || !this.props.errors) {\n return '';\n }\n\n const errorKeys = Object.keys(this.props.control.errors);\n for (const key of errorKeys) {\n if (this.props.errors[key]) {\n return this.props.errors[key];\n }\n }\n\n return '';\n }\n\n get dayCount(): number | null {\n const start = this.internalStartControl.value;\n const end = this.internalEndControl.value;\n\n if (!start || !end) {\n return null;\n }\n\n const startDate = new Date(start);\n const endDate = new Date(end);\n const diffTime = endDate.getTime() - startDate.getTime();\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n\n return Math.max(0, diffDays);\n }\n\n onStartDateChange(event: CustomEvent): void {\n this.updateMainControl();\n }\n\n onEndDateChange(event: CustomEvent): void {\n this.updateMainControl();\n }\n\n private updateMainControl(): void {\n const value: DateRangeValue = {\n start: this.internalStartControl.value,\n end: this.internalEndControl.value,\n };\n\n this.props.control?.setValue(value);\n this.props.control?.markAsTouched();\n\n // Validate and emit\n const isValid = this.validateRange(value);\n this.rangeChange.emit({\n value,\n isValid,\n dayCount: this.dayCount,\n });\n }\n\n private validateRange(value: DateRangeValue): boolean {\n // Check required\n if (this.props.requireBoth && (!value.start || !value.end)) {\n return false;\n }\n\n // Check day count constraints\n const days = this.dayCount;\n if (days !== null) {\n if (this.props.minRangeDays !== undefined && days < this.props.minRangeDays) {\n return false;\n }\n if (this.props.maxRangeDays !== undefined && days > this.props.maxRangeDays) {\n return false;\n }\n }\n\n return true;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, Output, EventEmitter, OnInit, OnDestroy, inject } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonButton, IonIcon, IonInput } from '@ionic/angular/standalone';\nimport { Subscription } from 'rxjs';\nimport { addIcons } from 'ionicons';\nimport { addOutline, removeOutline } from 'ionicons/icons';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { ComponentStates } from '../../types';\nimport { NumberStepperMetadata, NumberStepperChangeEvent } from './types';\n\naddIcons({ addOutline, removeOutline });\n\n@Component({\n selector: 'val-number-stepper',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, IonButton, IonIcon, IonInput],\n template: `\n <div\n class=\"number-stepper-container\"\n [class]=\"props.cssClass\"\n [class.size-small]=\"props.size === 'small'\"\n [class.size-medium]=\"props.size === 'medium' || !props.size\"\n [class.size-large]=\"props.size === 'large'\"\n [class.layout-vertical]=\"props.layout === 'vertical'\"\n [class.disabled]=\"props.state === states.DISABLED\"\n [style.--stepper-color]=\"getColor()\"\n >\n @if (props.label) {\n <label class=\"stepper-label\">{{ getLabel() }}</label>\n }\n\n <!-- Preset buttons -->\n @if (props.showPresets && props.presets?.length) {\n <div class=\"preset-buttons\">\n @for (preset of props.presets; track preset.value) {\n <button\n type=\"button\"\n class=\"preset-button\"\n [class.active]=\"currentValue === preset.value\"\n [class.popular]=\"preset.popular\"\n (click)=\"setValue(preset.value)\"\n [disabled]=\"props.state === states.DISABLED\"\n >\n {{ preset.label || preset.value }}\n </button>\n }\n </div>\n }\n\n <!-- Stepper controls -->\n <div class=\"stepper-controls\">\n <ion-button\n class=\"stepper-button decrement\"\n [color]=\"props.color || 'primary'\"\n fill=\"outline\"\n [shape]=\"props.buttonShape || 'round'\"\n [disabled]=\"isAtMin || props.state === states.DISABLED\"\n (click)=\"decrement()\"\n [attr.aria-label]=\"props.decrementLabel || 'Disminuir'\"\n >\n <ion-icon slot=\"icon-only\" name=\"remove-outline\"></ion-icon>\n </ion-button>\n\n <div class=\"value-display\">\n @if (props.showInput !== false && props.editableInput) {\n <ion-input\n type=\"number\"\n [formControl]=\"props.control\"\n [min]=\"props.min\"\n [max]=\"props.max\"\n [step]=\"props.step || 1\"\n [disabled]=\"props.state === states.DISABLED\"\n class=\"value-input\"\n (ionBlur)=\"onInputBlur()\"\n ></ion-input>\n } @else {\n <span class=\"value-text\">{{ currentValue }}</span>\n }\n\n @if (props.unitLabel) {\n <span class=\"unit-label\">{{ getUnitLabel() }}</span>\n }\n </div>\n\n <ion-button\n class=\"stepper-button increment\"\n [color]=\"props.color || 'primary'\"\n fill=\"outline\"\n [shape]=\"props.buttonShape || 'round'\"\n [disabled]=\"isAtMax || props.state === states.DISABLED\"\n (click)=\"increment()\"\n [attr.aria-label]=\"props.incrementLabel || 'Aumentar'\"\n >\n <ion-icon slot=\"icon-only\" name=\"add-outline\"></ion-icon>\n </ion-button>\n </div>\n\n <!-- Price display -->\n @if (props.showTotal && props.unitPrice) {\n <div class=\"price-display\">\n <span class=\"price-calculation\">\n {{ currentValue }} × {{ formatPrice(props.unitPrice) }}\n </span>\n <span class=\"price-equals\">=</span>\n <span class=\"price-total\">{{ formatPrice(totalPrice) }}</span>\n </div>\n }\n\n @if (props.hint) {\n <span class=\"stepper-hint\">{{ props.hint }}</span>\n }\n </div>\n `,\n styleUrls: ['./number-stepper.component.scss'],\n})\n/**\n * val-number-stepper\n *\n * A number input with increment/decrement buttons, ideal for quantity selection.\n *\n * @example Basic usage\n * ```html\n * <val-number-stepper\n * [props]=\"{\n * control: quantityControl,\n * min: 1,\n * max: 100\n * }\"\n * ></val-number-stepper>\n * ```\n *\n * @example With pricing\n * ```html\n * <val-number-stepper\n * [props]=\"{\n * control: ticketControl,\n * min: 1,\n * max: 50,\n * unitPrice: 10,\n * currency: 'MXN',\n * currencySymbol: '$',\n * showTotal: true,\n * unitLabel: 'boletos',\n * unitLabelSingular: 'boleto'\n * }\"\n * (valueChange)=\"onQuantityChange($event)\"\n * ></val-number-stepper>\n * ```\n *\n * @example With presets\n * ```html\n * <val-number-stepper\n * [props]=\"{\n * control: ticketControl,\n * min: 1,\n * max: 100,\n * showPresets: true,\n * presets: [\n * { value: 1 },\n * { value: 5, popular: true },\n * { value: 10 },\n * { value: 25 }\n * ]\n * }\"\n * ></val-number-stepper>\n * ```\n */\nexport class NumberStepperComponent implements OnInit, OnDestroy {\n @Input() props: NumberStepperMetadata;\n\n @Output() valueChange = new EventEmitter<NumberStepperChangeEvent>();\n\n states = ComponentStates;\n\n private valueSubscription: Subscription | null = null;\n private langService = inject(LangService);\n\n ngOnInit(): void {\n // Ensure initial value is within bounds\n this.clampValue();\n\n // Subscribe to value changes\n this.valueSubscription = this.props.control.valueChanges.subscribe(() => {\n this.clampValue();\n });\n }\n\n ngOnDestroy(): void {\n this.valueSubscription?.unsubscribe();\n }\n\n get currentValue(): number {\n return this.props.control.value ?? this.props.min ?? 0;\n }\n\n get isAtMin(): boolean {\n if (this.props.min === undefined) return false;\n return this.currentValue <= this.props.min;\n }\n\n get isAtMax(): boolean {\n if (this.props.max === undefined) return false;\n return this.currentValue >= this.props.max;\n }\n\n get totalPrice(): number {\n return this.currentValue * (this.props.unitPrice || 0);\n }\n\n increment(): void {\n const step = this.props.step || 1;\n const newValue = this.currentValue + step;\n this.setValue(newValue);\n }\n\n decrement(): void {\n const step = this.props.step || 1;\n const newValue = this.currentValue - step;\n this.setValue(newValue);\n }\n\n setValue(value: number): void {\n const previousValue = this.currentValue;\n const clampedValue = this.clamp(value);\n\n if (clampedValue !== previousValue) {\n this.props.control.setValue(clampedValue);\n this.emitChange(clampedValue, previousValue);\n }\n }\n\n onInputBlur(): void {\n this.clampValue();\n }\n\n private clampValue(): void {\n const currentVal = this.props.control.value;\n const clampedVal = this.clamp(currentVal);\n if (currentVal !== clampedVal) {\n this.props.control.setValue(clampedVal);\n }\n }\n\n private clamp(value: number): number {\n let result = value;\n if (this.props.min !== undefined && result < this.props.min) {\n result = this.props.min;\n }\n if (this.props.max !== undefined && result > this.props.max) {\n result = this.props.max;\n }\n return result;\n }\n\n private emitChange(value: number, previousValue: number): void {\n this.valueChange.emit({\n value,\n previousValue,\n totalPrice: this.props.unitPrice ? value * this.props.unitPrice : undefined,\n atMin: this.isAtMin,\n atMax: this.isAtMax,\n });\n }\n\n getLabel(): string {\n if (this.props.labelContentKey && this.props.contentClass) {\n return this.langService.getText(this.props.contentClass, this.props.labelContentKey, this.props.label || '');\n }\n return this.props.label || '';\n }\n\n getUnitLabel(): string {\n if (this.props.unitLabelContentKey && this.props.contentClass) {\n return this.langService.getText(\n this.props.contentClass,\n this.props.unitLabelContentKey,\n this.currentValue === 1 ? this.props.unitLabelSingular || this.props.unitLabel || '' : this.props.unitLabel || ''\n );\n }\n\n if (this.currentValue === 1 && this.props.unitLabelSingular) {\n return this.props.unitLabelSingular;\n }\n return this.props.unitLabel || '';\n }\n\n formatPrice(amount: number): string {\n const symbol = this.props.currencySymbol || '$';\n const formatted = amount.toLocaleString('es-MX', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n });\n return `${symbol}${formatted}`;\n }\n\n getColor(): string {\n if (this.props.color) {\n return `var(--ion-color-${this.props.color})`;\n }\n return 'var(--ion-color-primary)';\n }\n}\n","import { Color } from '@ionic/core';\n\n/**\n * Ticket status in the grid.\n */\nexport type TicketStatus = 'available' | 'sold' | 'reserved' | 'selected' | 'disabled';\n\n/**\n * Individual ticket data.\n */\nexport interface TicketData {\n /** Ticket number */\n number: number;\n /** Ticket status */\n status: TicketStatus;\n /** Optional owner name (for sold tickets) */\n owner?: string;\n /** Optional custom label */\n label?: string;\n}\n\n/**\n * Legend item for ticket grid.\n */\nexport interface TicketGridLegendItem {\n /** Status this legend represents */\n status: TicketStatus;\n /** Display label */\n label: string;\n /** Optional count */\n count?: number;\n}\n\n/**\n * Metadata for the ticket grid component.\n */\nexport interface TicketGridMetadata {\n /** Total number of tickets */\n totalTickets: number;\n /** Starting ticket number (default: 1) */\n startNumber?: number;\n /** Numbers of sold tickets */\n soldTickets?: number[];\n /** Numbers of reserved tickets */\n reservedTickets?: number[];\n /** Numbers of disabled tickets */\n disabledTickets?: number[];\n /** Currently selected tickets */\n selectedTickets?: number[];\n /** Custom ticket data (overrides computed status) */\n ticketData?: TicketData[];\n\n // === Selection ===\n /** Selection mode */\n selectionMode?: 'single' | 'multiple' | 'none';\n /** Maximum tickets that can be selected */\n maxSelection?: number;\n /** Minimum tickets required */\n minSelection?: number;\n /** Allow selecting sold/reserved tickets (for admin) */\n allowSelectSold?: boolean;\n\n // === Display ===\n /** Number of columns */\n columns?: number;\n /** Show legend */\n showLegend?: boolean;\n /** Legend position */\n legendPosition?: 'top' | 'bottom';\n /** Custom legend items */\n legendItems?: TicketGridLegendItem[];\n /** Show ticket count summary */\n showSummary?: boolean;\n /** Show search/filter input */\n showSearch?: boolean;\n /** Search placeholder */\n searchPlaceholder?: string;\n /** Ticket number padding (e.g., 3 = \"001\") */\n numberPadding?: number;\n\n // === Styling ===\n /** Component color for selected state */\n color?: Color;\n /** Ticket size */\n ticketSize?: 'small' | 'medium' | 'large';\n /** Grid gap */\n gap?: number;\n /** Custom CSS class */\n cssClass?: string;\n\n // === Quick select ===\n /** Show random selection button */\n showRandomSelect?: boolean;\n /** Random selection count */\n randomSelectCount?: number;\n /** Random select button label */\n randomSelectLabel?: string;\n\n // === Reactive content ===\n /** Content key for search placeholder */\n searchPlaceholderContentKey?: string;\n /** Content key for random select label */\n randomSelectLabelContentKey?: string;\n /** Content class for reactive content */\n contentClass?: string;\n}\n\n/**\n * Event emitted when selection changes.\n */\nexport interface TicketGridSelectionEvent {\n /** Currently selected ticket numbers */\n selectedTickets: number[];\n /** Last changed ticket number */\n changedTicket: number;\n /** Whether the ticket was selected or deselected */\n action: 'select' | 'deselect';\n /** Total count of selected tickets */\n count: number;\n /** Whether max selection reached */\n maxReached: boolean;\n}\n\n/**\n * Event emitted when a ticket is clicked (regardless of selection).\n */\nexport interface TicketGridClickEvent {\n /** Ticket number */\n number: number;\n /** Ticket status */\n status: TicketStatus;\n /** Whether it was selected/deselected (null if not selectable) */\n selected: boolean | null;\n}\n\n/**\n * Default legend labels in Spanish.\n */\nexport const DEFAULT_LEGEND_LABELS: Record<TicketStatus, string> = {\n available: 'Disponible',\n sold: 'Vendido',\n reserved: 'Reservado',\n selected: 'Seleccionado',\n disabled: 'No disponible',\n};\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { IonButton, IonIcon, IonSearchbar } from '@ionic/angular/standalone';\nimport { addIcons } from 'ionicons';\nimport { shuffleOutline } from 'ionicons/icons';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport {\n TicketGridMetadata,\n TicketGridSelectionEvent,\n TicketGridClickEvent,\n TicketStatus,\n TicketData,\n TicketGridLegendItem,\n DEFAULT_LEGEND_LABELS,\n} from './types';\n\naddIcons({ shuffleOutline });\n\n@Component({\n selector: 'val-ticket-grid',\n standalone: true,\n imports: [CommonModule, FormsModule, IonButton, IonIcon, IonSearchbar],\n template: `\n <div\n class=\"ticket-grid-container\"\n [class]=\"props.cssClass\"\n [class.size-small]=\"props.ticketSize === 'small'\"\n [class.size-medium]=\"props.ticketSize === 'medium' || !props.ticketSize\"\n [class.size-large]=\"props.ticketSize === 'large'\"\n [style.--grid-columns]=\"props.columns || 10\"\n [style.--grid-gap]=\"(props.gap || 4) + 'px'\"\n [style.--selected-color]=\"getColor()\"\n >\n <!-- Search and controls -->\n @if (props.showSearch || props.showRandomSelect) {\n <div class=\"grid-controls\">\n @if (props.showSearch) {\n <ion-searchbar\n [placeholder]=\"getSearchPlaceholder()\"\n [debounce]=\"300\"\n (ionInput)=\"onSearch($event)\"\n class=\"ticket-search\"\n ></ion-searchbar>\n }\n\n @if (props.showRandomSelect && props.selectionMode !== 'none') {\n <ion-button\n fill=\"outline\"\n [color]=\"props.color || 'primary'\"\n (click)=\"selectRandom()\"\n [disabled]=\"availableCount < (props.randomSelectCount || 1)\"\n >\n <ion-icon slot=\"start\" name=\"shuffle-outline\"></ion-icon>\n {{ getRandomSelectLabel() }}\n </ion-button>\n }\n </div>\n }\n\n <!-- Legend (top) -->\n @if (props.showLegend && props.legendPosition !== 'bottom') {\n <div class=\"ticket-legend\">\n @for (item of getLegendItems(); track item.status) {\n <div class=\"legend-item\">\n <span class=\"legend-color\" [class]=\"'status-' + item.status\"></span>\n <span class=\"legend-label\">{{ item.label }}</span>\n @if (item.count !== undefined) {\n <span class=\"legend-count\">({{ item.count }})</span>\n }\n </div>\n }\n </div>\n }\n\n <!-- Summary -->\n @if (props.showSummary) {\n <div class=\"ticket-summary\">\n <span class=\"summary-item\">\n <strong>{{ selectedTickets.length }}</strong> seleccionado{{ selectedTickets.length !== 1 ? 's' : '' }}\n </span>\n @if (props.maxSelection) {\n <span class=\"summary-item\">\n (máx: {{ props.maxSelection }})\n </span>\n }\n </div>\n }\n\n <!-- Grid -->\n <div class=\"ticket-grid\" role=\"grid\">\n @for (ticket of displayedTickets; track ticket.number) {\n <button\n type=\"button\"\n class=\"ticket-cell\"\n [class]=\"'status-' + ticket.status\"\n [class.highlighted]=\"isHighlighted(ticket.number)\"\n [disabled]=\"!isSelectable(ticket)\"\n [attr.aria-label]=\"getTicketAriaLabel(ticket)\"\n [attr.aria-pressed]=\"ticket.status === 'selected'\"\n (click)=\"onTicketClick(ticket)\"\n >\n {{ formatNumber(ticket.number) }}\n </button>\n }\n </div>\n\n <!-- Legend (bottom) -->\n @if (props.showLegend && props.legendPosition === 'bottom') {\n <div class=\"ticket-legend bottom\">\n @for (item of getLegendItems(); track item.status) {\n <div class=\"legend-item\">\n <span class=\"legend-color\" [class]=\"'status-' + item.status\"></span>\n <span class=\"legend-label\">{{ item.label }}</span>\n @if (item.count !== undefined) {\n <span class=\"legend-count\">({{ item.count }})</span>\n }\n </div>\n }\n </div>\n }\n </div>\n `,\n styleUrls: ['./ticket-grid.component.scss'],\n})\n/**\n * val-ticket-grid\n *\n * A grid for selecting ticket numbers, commonly used in raffles and lotteries.\n *\n * @example Basic usage\n * ```html\n * <val-ticket-grid\n * [props]=\"{\n * totalTickets: 100,\n * soldTickets: [1, 5, 12, 23],\n * selectionMode: 'multiple',\n * maxSelection: 10\n * }\"\n * (selectionChange)=\"onSelectionChange($event)\"\n * ></val-ticket-grid>\n * ```\n *\n * @example With legend and search\n * ```html\n * <val-ticket-grid\n * [props]=\"{\n * totalTickets: 500,\n * soldTickets: soldNumbers,\n * reservedTickets: reservedNumbers,\n * columns: 20,\n * showLegend: true,\n * showSearch: true,\n * showRandomSelect: true,\n * randomSelectCount: 5,\n * maxSelection: 10\n * }\"\n * ></val-ticket-grid>\n * ```\n */\nexport class TicketGridComponent implements OnInit, OnChanges {\n @Input() props: TicketGridMetadata;\n\n @Output() selectionChange = new EventEmitter<TicketGridSelectionEvent>();\n @Output() ticketClick = new EventEmitter<TicketGridClickEvent>();\n\n tickets: TicketData[] = [];\n displayedTickets: TicketData[] = [];\n selectedTickets: number[] = [];\n searchTerm = '';\n highlightedNumbers: number[] = [];\n\n private langService = inject(LangService);\n\n ngOnInit(): void {\n this.buildTickets();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n this.buildTickets();\n }\n }\n\n private buildTickets(): void {\n const start = this.props.startNumber ?? 1;\n const total = this.props.totalTickets;\n const soldSet = new Set(this.props.soldTickets || []);\n const reservedSet = new Set(this.props.reservedTickets || []);\n const disabledSet = new Set(this.props.disabledTickets || []);\n const selectedSet = new Set(this.props.selectedTickets || []);\n\n // Initialize selected tickets from props\n this.selectedTickets = [...(this.props.selectedTickets || [])];\n\n // Build ticket array\n if (this.props.ticketData?.length) {\n // Use custom ticket data\n this.tickets = [...this.props.ticketData];\n } else {\n // Generate from numbers\n this.tickets = [];\n for (let i = start; i < start + total; i++) {\n let status: TicketStatus = 'available';\n\n if (disabledSet.has(i)) {\n status = 'disabled';\n } else if (soldSet.has(i)) {\n status = 'sold';\n } else if (reservedSet.has(i)) {\n status = 'reserved';\n } else if (selectedSet.has(i)) {\n status = 'selected';\n }\n\n this.tickets.push({ number: i, status });\n }\n }\n\n this.applySearch();\n }\n\n private applySearch(): void {\n if (!this.searchTerm) {\n this.displayedTickets = [...this.tickets];\n this.highlightedNumbers = [];\n } else {\n // Filter/highlight tickets matching search\n const term = this.searchTerm.trim();\n this.highlightedNumbers = this.tickets\n .filter(t => this.formatNumber(t.number).includes(term))\n .map(t => t.number);\n this.displayedTickets = [...this.tickets];\n }\n }\n\n onSearch(event: CustomEvent): void {\n this.searchTerm = event.detail.value || '';\n this.applySearch();\n }\n\n isHighlighted(number: number): boolean {\n return this.highlightedNumbers.includes(number);\n }\n\n isSelectable(ticket: TicketData): boolean {\n if (this.props.selectionMode === 'none') return false;\n\n // Check if sold/reserved and admin override\n if (ticket.status === 'sold' || ticket.status === 'reserved') {\n return this.props.allowSelectSold === true;\n }\n\n if (ticket.status === 'disabled') return false;\n\n // Check max selection\n if (\n ticket.status !== 'selected' &&\n this.props.maxSelection &&\n this.selectedTickets.length >= this.props.maxSelection\n ) {\n return false;\n }\n\n return true;\n }\n\n onTicketClick(ticket: TicketData): void {\n const isSelected = this.selectedTickets.includes(ticket.number);\n\n // Emit click event regardless\n this.ticketClick.emit({\n number: ticket.number,\n status: ticket.status,\n selected: this.isSelectable(ticket) ? !isSelected : null,\n });\n\n if (!this.isSelectable(ticket) && ticket.status !== 'selected') {\n return;\n }\n\n // Handle selection\n if (isSelected) {\n // Deselect\n this.selectedTickets = this.selectedTickets.filter(n => n !== ticket.number);\n ticket.status = 'available';\n\n this.selectionChange.emit({\n selectedTickets: [...this.selectedTickets],\n changedTicket: ticket.number,\n action: 'deselect',\n count: this.selectedTickets.length,\n maxReached: false,\n });\n } else {\n // Select\n if (this.props.selectionMode === 'single') {\n // Deselect previous\n this.selectedTickets.forEach(num => {\n const t = this.tickets.find(x => x.number === num);\n if (t) t.status = 'available';\n });\n this.selectedTickets = [ticket.number];\n } else {\n this.selectedTickets.push(ticket.number);\n }\n\n ticket.status = 'selected';\n\n this.selectionChange.emit({\n selectedTickets: [...this.selectedTickets],\n changedTicket: ticket.number,\n action: 'select',\n count: this.selectedTickets.length,\n maxReached: this.props.maxSelection\n ? this.selectedTickets.length >= this.props.maxSelection\n : false,\n });\n }\n }\n\n selectRandom(): void {\n const count = this.props.randomSelectCount || 1;\n const available = this.tickets.filter(\n t => t.status === 'available' && !this.selectedTickets.includes(t.number)\n );\n\n // Determine how many we can select\n const maxCanSelect = this.props.maxSelection\n ? Math.min(count, this.props.maxSelection - this.selectedTickets.length)\n : count;\n\n if (available.length === 0 || maxCanSelect <= 0) return;\n\n // Random shuffle and pick\n const shuffled = [...available].sort(() => Math.random() - 0.5);\n const toSelect = shuffled.slice(0, Math.min(maxCanSelect, available.length));\n\n toSelect.forEach(ticket => {\n ticket.status = 'selected';\n this.selectedTickets.push(ticket.number);\n });\n\n this.selectionChange.emit({\n selectedTickets: [...this.selectedTickets],\n changedTicket: toSelect[toSelect.length - 1].number,\n action: 'select',\n count: this.selectedTickets.length,\n maxReached: this.props.maxSelection\n ? this.selectedTickets.length >= this.props.maxSelection\n : false,\n });\n }\n\n /**\n * Clear all selections.\n */\n clearSelection(): void {\n this.selectedTickets.forEach(num => {\n const ticket = this.tickets.find(t => t.number === num);\n if (ticket) ticket.status = 'available';\n });\n this.selectedTickets = [];\n }\n\n /**\n * Get selected ticket numbers.\n */\n getSelectedTickets(): number[] {\n return [...this.selectedTickets];\n }\n\n get availableCount(): number {\n return this.tickets.filter(t => t.status === 'available').length;\n }\n\n get soldCount(): number {\n return this.tickets.filter(t => t.status === 'sold').length;\n }\n\n getLegendItems(): TicketGridLegendItem[] {\n if (this.props.legendItems) {\n return this.props.legendItems;\n }\n\n const items: TicketGridLegendItem[] = [\n { status: 'available', label: DEFAULT_LEGEND_LABELS.available, count: this.availableCount },\n { status: 'selected', label: DEFAULT_LEGEND_LABELS.selected, count: this.selectedTickets.length },\n ];\n\n if (this.props.soldTickets?.length) {\n items.push({ status: 'sold', label: DEFAULT_LEGEND_LABELS.sold, count: this.soldCount });\n }\n\n if (this.props.reservedTickets?.length) {\n items.push({\n status: 'reserved',\n label: DEFAULT_LEGEND_LABELS.reserved,\n count: this.props.reservedTickets.length,\n });\n }\n\n return items;\n }\n\n formatNumber(num: number): string {\n if (this.props.numberPadding) {\n return String(num).padStart(this.props.numberPadding, '0');\n }\n return String(num);\n }\n\n getTicketAriaLabel(ticket: TicketData): string {\n const statusLabel = DEFAULT_LEGEND_LABELS[ticket.status];\n return `Boleto ${this.formatNumber(ticket.number)}, ${statusLabel}`;\n }\n\n getSearchPlaceholder(): string {\n if (this.props.searchPlaceholderContentKey && this.props.contentClass) {\n return this.langService.getText(\n this.props.contentClass,\n this.props.searchPlaceholderContentKey,\n this.props.searchPlaceholder || 'Buscar número...'\n );\n }\n return this.props.searchPlaceholder || 'Buscar número...';\n }\n\n getRandomSelectLabel(): string {\n if (this.props.randomSelectLabelContentKey && this.props.contentClass) {\n return this.langService.getText(\n this.props.contentClass,\n this.props.randomSelectLabelContentKey,\n this.props.randomSelectLabel || 'Aleatorio'\n );\n }\n return this.props.randomSelectLabel || 'Aleatorio';\n }\n\n getColor(): string {\n if (this.props.color) {\n return `var(--ion-color-${this.props.color})`;\n }\n return 'var(--ion-color-primary)';\n }\n}\n","import { Color } from '@ionic/core';\n\n/**\n * Social platform identifiers for sharing.\n */\nexport type SharePlatform =\n | 'whatsapp'\n | 'facebook'\n | 'twitter'\n | 'telegram'\n | 'linkedin'\n | 'email'\n | 'copy'\n | 'native';\n\n/**\n * Configuration for a share button.\n */\nexport interface ShareButtonConfig {\n /** Platform identifier */\n platform: SharePlatform;\n /** Custom label (overrides default) */\n label?: string;\n /** Custom icon (overrides default) */\n icon?: string;\n /** Custom color (overrides default) */\n color?: Color | string;\n /** Whether this button is disabled */\n disabled?: boolean;\n /** Additional custom data for the platform */\n customData?: Record<string, string>;\n}\n\n/**\n * Data to be shared.\n */\nexport interface ShareData {\n /** Title of the content */\n title?: string;\n /** Description or message */\n text?: string;\n /** URL to share */\n url?: string;\n /** Hashtags (for Twitter) */\n hashtags?: string[];\n /** Email subject (for email sharing) */\n emailSubject?: string;\n /** Email body (for email sharing) */\n emailBody?: string;\n /** Phone number for WhatsApp (optional, for direct messaging) */\n whatsappPhone?: string;\n}\n\n/**\n * Metadata for the share buttons component.\n */\nexport interface ShareButtonsMetadata {\n /** Data to share */\n shareData: ShareData;\n /** Platforms to show (defaults to all) */\n platforms?: SharePlatform[];\n /** Custom button configurations */\n buttons?: ShareButtonConfig[];\n\n // === Display options ===\n /** Layout direction */\n layout?: 'horizontal' | 'vertical';\n /** Size variant */\n size?: 'small' | 'medium' | 'large';\n /** Button style */\n variant?: 'solid' | 'outline' | 'icon-only';\n /** Show labels */\n showLabels?: boolean;\n /** Gap between buttons */\n gap?: number;\n\n // === Styling ===\n /** Custom CSS class */\n cssClass?: string;\n /** Use platform colors */\n usePlatformColors?: boolean;\n /** Default color (when not using platform colors) */\n color?: Color;\n\n // === Behavior ===\n /** Show copy success toast */\n showCopyToast?: boolean;\n /** Copy success message */\n copySuccessMessage?: string;\n /** Use native share when available */\n preferNativeShare?: boolean;\n\n // === Reactive content ===\n /** Content class for reactive content */\n contentClass?: string;\n /** Content key for copy success message */\n copySuccessMessageContentKey?: string;\n}\n\n/**\n * Event emitted when a share action is performed.\n */\nexport interface ShareEvent {\n /** Platform that was used */\n platform: SharePlatform;\n /** Whether the share was successful */\n success: boolean;\n /** Error message if failed */\n error?: string;\n /** The share data that was used */\n shareData: ShareData;\n}\n\n/**\n * Default platform configurations.\n */\nexport interface PlatformConfig {\n name: string;\n icon: string;\n color: string;\n getUrl: (data: ShareData) => string;\n}\n\n/**\n * Default platform configurations.\n */\nexport const PLATFORM_CONFIGS: Record<SharePlatform, PlatformConfig> = {\n whatsapp: {\n name: 'WhatsApp',\n icon: 'logo-whatsapp',\n color: '#25D366',\n getUrl: (data: ShareData) => {\n const text = encodeURIComponent(`${data.text || ''} ${data.url || ''}`.trim());\n if (data.whatsappPhone) {\n return `https://wa.me/${data.whatsappPhone}?text=${text}`;\n }\n return `https://wa.me/?text=${text}`;\n },\n },\n facebook: {\n name: 'Facebook',\n icon: 'logo-facebook',\n color: '#1877F2',\n getUrl: (data: ShareData) => {\n const url = encodeURIComponent(data.url || '');\n return `https://www.facebook.com/sharer/sharer.php?u=${url}`;\n },\n },\n twitter: {\n name: 'Twitter',\n icon: 'logo-twitter',\n color: '#1DA1F2',\n getUrl: (data: ShareData) => {\n const text = encodeURIComponent(data.text || '');\n const url = encodeURIComponent(data.url || '');\n const hashtags = data.hashtags?.join(',') || '';\n return `https://twitter.com/intent/tweet?text=${text}&url=${url}&hashtags=${hashtags}`;\n },\n },\n telegram: {\n name: 'Telegram',\n icon: 'paper-plane-outline',\n color: '#0088CC',\n getUrl: (data: ShareData) => {\n const text = encodeURIComponent(data.text || '');\n const url = encodeURIComponent(data.url || '');\n return `https://t.me/share/url?url=${url}&text=${text}`;\n },\n },\n linkedin: {\n name: 'LinkedIn',\n icon: 'logo-linkedin',\n color: '#0A66C2',\n getUrl: (data: ShareData) => {\n const url = encodeURIComponent(data.url || '');\n return `https://www.linkedin.com/sharing/share-offsite/?url=${url}`;\n },\n },\n email: {\n name: 'Email',\n icon: 'mail-outline',\n color: '#EA4335',\n getUrl: (data: ShareData) => {\n const subject = encodeURIComponent(data.emailSubject || data.title || '');\n const body = encodeURIComponent(data.emailBody || `${data.text || ''}\\n\\n${data.url || ''}`.trim());\n return `mailto:?subject=${subject}&body=${body}`;\n },\n },\n copy: {\n name: 'Copiar enlace',\n icon: 'copy-outline',\n color: '#6B7280',\n getUrl: () => '',\n },\n native: {\n name: 'Compartir',\n icon: 'share-outline',\n color: '#6B7280',\n getUrl: () => '',\n },\n};\n\n/**\n * Default platforms to show.\n */\nexport const DEFAULT_PLATFORMS: SharePlatform[] = [\n 'whatsapp',\n 'facebook',\n 'twitter',\n 'copy',\n];\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, Output, EventEmitter, inject } from '@angular/core';\nimport { IonButton, IonIcon, ToastController } from '@ionic/angular/standalone';\nimport { addIcons } from 'ionicons';\nimport {\n logoWhatsapp,\n logoFacebook,\n logoTwitter,\n logoLinkedin,\n paperPlaneOutline,\n mailOutline,\n copyOutline,\n shareOutline,\n} from 'ionicons/icons';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport {\n ShareButtonsMetadata,\n ShareEvent,\n SharePlatform,\n ShareButtonConfig,\n PLATFORM_CONFIGS,\n DEFAULT_PLATFORMS,\n} from './types';\n\naddIcons({\n logoWhatsapp,\n logoFacebook,\n logoTwitter,\n logoLinkedin,\n paperPlaneOutline,\n mailOutline,\n copyOutline,\n shareOutline,\n});\n\n@Component({\n selector: 'val-share-buttons',\n standalone: true,\n imports: [CommonModule, IonButton, IonIcon],\n template: `\n <div\n class=\"share-buttons-container\"\n [class]=\"props.cssClass\"\n [class.layout-horizontal]=\"props.layout !== 'vertical'\"\n [class.layout-vertical]=\"props.layout === 'vertical'\"\n [class.size-small]=\"props.size === 'small'\"\n [class.size-medium]=\"props.size === 'medium' || !props.size\"\n [class.size-large]=\"props.size === 'large'\"\n [class.variant-solid]=\"props.variant === 'solid' || !props.variant\"\n [class.variant-outline]=\"props.variant === 'outline'\"\n [class.variant-icon-only]=\"props.variant === 'icon-only'\"\n [style.--share-gap]=\"(props.gap || 8) + 'px'\"\n >\n @for (button of getButtons(); track button.platform) {\n <ion-button\n class=\"share-button\"\n [class]=\"'platform-' + button.platform\"\n [fill]=\"getButtonFill()\"\n [disabled]=\"button.disabled\"\n [style.--background]=\"getButtonColor(button)\"\n [style.--background-hover]=\"getButtonColor(button)\"\n [style.--border-color]=\"getButtonColor(button)\"\n [style.--color]=\"props.variant === 'outline' ? getButtonColor(button) : null\"\n (click)=\"share(button.platform)\"\n [attr.aria-label]=\"getButtonLabel(button)\"\n >\n <ion-icon\n [slot]=\"props.showLabels === false || props.variant === 'icon-only' ? 'icon-only' : 'start'\"\n [name]=\"getButtonIcon(button)\"\n ></ion-icon>\n @if (props.showLabels !== false && props.variant !== 'icon-only') {\n {{ getButtonLabel(button) }}\n }\n </ion-button>\n }\n </div>\n `,\n styleUrls: ['./share-buttons.component.scss'],\n})\n/**\n * val-share-buttons\n *\n * A component for sharing content to various social media platforms.\n *\n * @example Basic usage\n * ```html\n * <val-share-buttons\n * [props]=\"{\n * shareData: {\n * title: 'Check this out!',\n * text: 'Amazing content here',\n * url: 'https://example.com'\n * }\n * }\"\n * ></val-share-buttons>\n * ```\n *\n * @example With specific platforms\n * ```html\n * <val-share-buttons\n * [props]=\"{\n * shareData: {\n * title: 'Join my raffle!',\n * text: 'Win amazing prizes',\n * url: 'https://raffle.example.com/123'\n * },\n * platforms: ['whatsapp', 'facebook', 'twitter', 'copy'],\n * variant: 'icon-only',\n * usePlatformColors: true\n * }\"\n * (shareComplete)=\"onShare($event)\"\n * ></val-share-buttons>\n * ```\n *\n * @example Vertical layout\n * ```html\n * <val-share-buttons\n * [props]=\"{\n * shareData: shareData,\n * layout: 'vertical',\n * showLabels: true,\n * size: 'large'\n * }\"\n * ></val-share-buttons>\n * ```\n */\nexport class ShareButtonsComponent {\n @Input() props: ShareButtonsMetadata;\n\n @Output() shareComplete = new EventEmitter<ShareEvent>();\n\n private toastController = inject(ToastController);\n private langService = inject(LangService);\n\n getButtons(): ShareButtonConfig[] {\n if (this.props.buttons?.length) {\n return this.props.buttons;\n }\n\n const platforms = this.props.platforms || DEFAULT_PLATFORMS;\n\n // Filter out native share if not supported\n const filteredPlatforms = platforms.filter(p => {\n if (p === 'native' && !this.isNativeShareSupported()) {\n return false;\n }\n return true;\n });\n\n return filteredPlatforms.map(platform => ({ platform }));\n }\n\n getButtonFill(): 'solid' | 'outline' | 'clear' {\n if (this.props.variant === 'outline') return 'outline';\n if (this.props.variant === 'icon-only') return 'clear';\n return 'solid';\n }\n\n getButtonIcon(button: ShareButtonConfig): string {\n if (button.icon) return button.icon;\n return PLATFORM_CONFIGS[button.platform]?.icon || 'share-outline';\n }\n\n getButtonLabel(button: ShareButtonConfig): string {\n if (button.label) return button.label;\n return PLATFORM_CONFIGS[button.platform]?.name || button.platform;\n }\n\n getButtonColor(button: ShareButtonConfig): string {\n if (button.color) {\n if (typeof button.color === 'string' && button.color.startsWith('#')) {\n return button.color;\n }\n return `var(--ion-color-${button.color})`;\n }\n\n if (this.props.usePlatformColors !== false) {\n return PLATFORM_CONFIGS[button.platform]?.color || 'var(--ion-color-primary)';\n }\n\n if (this.props.color) {\n return `var(--ion-color-${this.props.color})`;\n }\n\n return 'var(--ion-color-primary)';\n }\n\n async share(platform: SharePlatform): Promise<void> {\n const shareData = this.props.shareData;\n\n try {\n switch (platform) {\n case 'native':\n await this.nativeShare();\n break;\n case 'copy':\n await this.copyToClipboard();\n break;\n default:\n this.openShareUrl(platform);\n break;\n }\n\n this.shareComplete.emit({\n platform,\n success: true,\n shareData,\n });\n } catch (error) {\n this.shareComplete.emit({\n platform,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n shareData,\n });\n }\n }\n\n private openShareUrl(platform: SharePlatform): void {\n const config = PLATFORM_CONFIGS[platform];\n if (!config) return;\n\n const url = config.getUrl(this.props.shareData);\n if (url) {\n window.open(url, '_blank', 'noopener,noreferrer');\n }\n }\n\n private async nativeShare(): Promise<void> {\n if (!this.isNativeShareSupported()) {\n throw new Error('Native share not supported');\n }\n\n const data: ShareData = {\n title: this.props.shareData.title,\n text: this.props.shareData.text,\n url: this.props.shareData.url,\n };\n\n await navigator.share(data as globalThis.ShareData);\n }\n\n private async copyToClipboard(): Promise<void> {\n const textToCopy = this.props.shareData.url ||\n `${this.props.shareData.text || ''} ${this.props.shareData.url || ''}`.trim();\n\n await navigator.clipboard.writeText(textToCopy);\n\n if (this.props.showCopyToast !== false) {\n const message = this.getCopySuccessMessage();\n const toast = await this.toastController.create({\n message,\n duration: 2000,\n position: 'bottom',\n color: 'success',\n icon: 'checkmark-circle-outline',\n });\n await toast.present();\n }\n }\n\n private getCopySuccessMessage(): string {\n if (this.props.copySuccessMessageContentKey && this.props.contentClass) {\n return this.langService.getText(\n this.props.contentClass,\n this.props.copySuccessMessageContentKey,\n this.props.copySuccessMessage || '¡Enlace copiado!'\n );\n }\n return this.props.copySuccessMessage || '¡Enlace copiado!';\n }\n\n private isNativeShareSupported(): boolean {\n return typeof navigator !== 'undefined' && !!navigator.share;\n }\n}\n","import { Color } from '@ionic/core';\nimport { AvatarMetadata } from '../../atoms/avatar/types';\n\n/**\n * Winner information.\n */\nexport interface WinnerInfo {\n /** Winner's name */\n name: string;\n /** Winner's ticket number */\n ticketNumber: number | string;\n /** Winner's avatar */\n avatar?: AvatarMetadata;\n /** Prize won */\n prize?: string;\n /** Prize description */\n prizeDescription?: string;\n /** Prize image URL */\n prizeImage?: string;\n /** Prize value */\n prizeValue?: number;\n /** Winner's location (city, country) */\n location?: string;\n /** Additional winner info */\n customData?: Record<string, any>;\n}\n\n/**\n * Animation type for winner reveal.\n */\nexport type WinnerAnimationType =\n | 'none'\n | 'fade'\n | 'zoom'\n | 'slide'\n | 'confetti'\n | 'spotlight';\n\n/**\n * Display mode for the winner.\n */\nexport type WinnerDisplayMode =\n | 'compact' // Just name and ticket\n | 'standard' // Name, ticket, prize\n | 'full' // All info with image\n | 'celebration'; // Full with animations\n\n/**\n * Metadata for the winner display component.\n */\nexport interface WinnerDisplayMetadata {\n /** Winner information */\n winner: WinnerInfo;\n\n // === Display options ===\n /** Display mode */\n mode?: WinnerDisplayMode;\n /** Size variant */\n size?: 'small' | 'medium' | 'large';\n /** Show confetti animation */\n showConfetti?: boolean;\n /** Show trophy icon */\n showTrophy?: boolean;\n /** Show ticket number */\n showTicketNumber?: boolean;\n /** Show prize info */\n showPrize?: boolean;\n /** Show prize value */\n showPrizeValue?: boolean;\n /** Show location */\n showLocation?: boolean;\n /** Number padding for ticket */\n numberPadding?: number;\n\n // === Animation ===\n /** Animation type */\n animation?: WinnerAnimationType;\n /** Animation duration in ms */\n animationDuration?: number;\n /** Delay before showing (for suspense) */\n revealDelay?: number;\n /** Auto-play animation on init */\n autoPlay?: boolean;\n\n // === Styling ===\n /** Component color */\n color?: Color;\n /** Custom CSS class */\n cssClass?: string;\n /** Background style */\n background?: 'solid' | 'gradient' | 'transparent';\n\n // === Labels ===\n /** Winner label (e.g., \"¡Ganador!\") */\n winnerLabel?: string;\n /** Ticket label (e.g., \"Boleto #\") */\n ticketLabel?: string;\n /** Prize label (e.g., \"Premio:\") */\n prizeLabel?: string;\n\n // === Reactive content ===\n /** Content class for reactive content */\n contentClass?: string;\n /** Content key for winner label */\n winnerLabelContentKey?: string;\n /** Content key for ticket label */\n ticketLabelContentKey?: string;\n /** Content key for prize label */\n prizeLabelContentKey?: string;\n}\n\n/**\n * Event emitted when animation completes.\n */\nexport interface WinnerDisplayAnimationEvent {\n /** Animation type that completed */\n animation: WinnerAnimationType;\n /** Winner info */\n winner: WinnerInfo;\n}\n\n/**\n * Default labels.\n */\nexport const DEFAULT_WINNER_LABELS = {\n winner: '¡Ganador!',\n ticket: 'Boleto #',\n prize: 'Premio:',\n};\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n inject,\n ElementRef,\n AfterViewInit,\n} from '@angular/core';\nimport { IonIcon } from '@ionic/angular/standalone';\nimport { addIcons } from 'ionicons';\nimport { trophyOutline, ticketOutline, giftOutline, locationOutline } from 'ionicons/icons';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { AvatarComponent } from '../../atoms/avatar/avatar.component';\nimport {\n WinnerDisplayMetadata,\n WinnerDisplayAnimationEvent,\n DEFAULT_WINNER_LABELS,\n} from './types';\n\naddIcons({ trophyOutline, ticketOutline, giftOutline, locationOutline });\n\n@Component({\n selector: 'val-winner-display',\n standalone: true,\n imports: [CommonModule, IonIcon, AvatarComponent],\n template: `\n <div\n class=\"winner-display-container\"\n [class]=\"props.cssClass\"\n [class.mode-compact]=\"props.mode === 'compact'\"\n [class.mode-standard]=\"props.mode === 'standard' || !props.mode\"\n [class.mode-full]=\"props.mode === 'full'\"\n [class.mode-celebration]=\"props.mode === 'celebration'\"\n [class.size-small]=\"props.size === 'small'\"\n [class.size-medium]=\"props.size === 'medium' || !props.size\"\n [class.size-large]=\"props.size === 'large'\"\n [class.bg-solid]=\"props.background === 'solid' || !props.background\"\n [class.bg-gradient]=\"props.background === 'gradient'\"\n [class.bg-transparent]=\"props.background === 'transparent'\"\n [class.animating]=\"isAnimating\"\n [class.revealed]=\"isRevealed\"\n [class.animation-fade]=\"props.animation === 'fade'\"\n [class.animation-zoom]=\"props.animation === 'zoom'\"\n [class.animation-slide]=\"props.animation === 'slide'\"\n [class.animation-spotlight]=\"props.animation === 'spotlight'\"\n [style.--winner-color]=\"getColor()\"\n [style.--animation-duration]=\"(props.animationDuration || 800) + 'ms'\"\n >\n <!-- Confetti overlay -->\n @if (props.showConfetti && (props.mode === 'celebration' || props.mode === 'full')) {\n <div class=\"confetti-container\" [class.active]=\"showConfetti\">\n @for (i of confettiPieces; track i) {\n <div\n class=\"confetti-piece\"\n [style.--delay]=\"i * 0.1 + 's'\"\n [style.--x]=\"getRandomX(i)\"\n [style.--rotation]=\"getRandomRotation(i)\"\n ></div>\n }\n </div>\n }\n\n <!-- Trophy icon -->\n @if (props.showTrophy !== false) {\n <div class=\"trophy-container\">\n <ion-icon name=\"trophy-outline\" class=\"trophy-icon\"></ion-icon>\n </div>\n }\n\n <!-- Winner label -->\n <div class=\"winner-label\">{{ getWinnerLabel() }}</div>\n\n <!-- Winner info -->\n <div class=\"winner-info\">\n <!-- Avatar -->\n @if (props.winner.avatar && (props.mode === 'full' || props.mode === 'celebration')) {\n <val-avatar [props]=\"props.winner.avatar\" class=\"winner-avatar\"></val-avatar>\n }\n\n <!-- Name -->\n <h2 class=\"winner-name\">{{ props.winner.name }}</h2>\n\n <!-- Location -->\n @if (props.showLocation !== false && props.winner.location) {\n <div class=\"winner-location\">\n <ion-icon name=\"location-outline\"></ion-icon>\n <span>{{ props.winner.location }}</span>\n </div>\n }\n\n <!-- Ticket number -->\n @if (props.showTicketNumber !== false) {\n <div class=\"ticket-info\">\n <ion-icon name=\"ticket-outline\"></ion-icon>\n <span class=\"ticket-label\">{{ getTicketLabel() }}</span>\n <span class=\"ticket-number\">{{ formatTicketNumber() }}</span>\n </div>\n }\n </div>\n\n <!-- Prize info -->\n @if (props.showPrize !== false && props.winner.prize) {\n <div class=\"prize-info\">\n @if (props.winner.prizeImage && (props.mode === 'full' || props.mode === 'celebration')) {\n <div class=\"prize-image\">\n <img [src]=\"props.winner.prizeImage\" [alt]=\"props.winner.prize\" />\n </div>\n }\n\n <div class=\"prize-details\">\n <div class=\"prize-header\">\n <ion-icon name=\"gift-outline\"></ion-icon>\n <span class=\"prize-label\">{{ getPrizeLabel() }}</span>\n </div>\n <h3 class=\"prize-name\">{{ props.winner.prize }}</h3>\n\n @if (props.winner.prizeDescription) {\n <p class=\"prize-description\">{{ props.winner.prizeDescription }}</p>\n }\n\n @if (props.showPrizeValue !== false && props.winner.prizeValue) {\n <div class=\"prize-value\">\n {{ formatPrizeValue() }}\n </div>\n }\n </div>\n </div>\n }\n </div>\n `,\n styleUrls: ['./winner-display.component.scss'],\n})\n/**\n * val-winner-display\n *\n * A component for displaying raffle winners with celebration animations.\n *\n * @example Basic usage\n * ```html\n * <val-winner-display\n * [props]=\"{\n * winner: {\n * name: 'Juan Pérez',\n * ticketNumber: 42\n * }\n * }\"\n * ></val-winner-display>\n * ```\n *\n * @example Full celebration mode\n * ```html\n * <val-winner-display\n * [props]=\"{\n * winner: {\n * name: 'María García',\n * ticketNumber: 156,\n * prize: 'iPhone 15 Pro',\n * prizeValue: 25000,\n * location: 'CDMX, México',\n * avatar: { image: 'avatar.jpg' }\n * },\n * mode: 'celebration',\n * showConfetti: true,\n * animation: 'zoom',\n * color: 'warning'\n * }\"\n * (animationComplete)=\"onReveal($event)\"\n * ></val-winner-display>\n * ```\n */\nexport class WinnerDisplayComponent implements OnInit, OnDestroy, AfterViewInit {\n @Input() props: WinnerDisplayMetadata;\n\n @Output() animationComplete = new EventEmitter<WinnerDisplayAnimationEvent>();\n\n isAnimating = false;\n isRevealed = false;\n showConfetti = false;\n confettiPieces = Array.from({ length: 50 }, (_, i) => i);\n\n private revealTimeout: ReturnType<typeof setTimeout> | null = null;\n private animationTimeout: ReturnType<typeof setTimeout> | null = null;\n private langService = inject(LangService);\n private elementRef = inject(ElementRef);\n\n ngOnInit(): void {\n if (this.props.autoPlay !== false) {\n this.startReveal();\n }\n }\n\n ngAfterViewInit(): void {\n // Additional setup if needed\n }\n\n ngOnDestroy(): void {\n if (this.revealTimeout) clearTimeout(this.revealTimeout);\n if (this.animationTimeout) clearTimeout(this.animationTimeout);\n }\n\n startReveal(): void {\n const delay = this.props.revealDelay || 0;\n\n this.revealTimeout = setTimeout(() => {\n this.isAnimating = true;\n\n const animationDuration = this.props.animationDuration || 800;\n\n this.animationTimeout = setTimeout(() => {\n this.isAnimating = false;\n this.isRevealed = true;\n\n if (this.props.showConfetti) {\n this.showConfetti = true;\n }\n\n this.animationComplete.emit({\n animation: this.props.animation || 'fade',\n winner: this.props.winner,\n });\n }, animationDuration);\n }, delay);\n }\n\n /**\n * Manually trigger the reveal animation.\n */\n reveal(): void {\n this.isRevealed = false;\n this.showConfetti = false;\n this.startReveal();\n }\n\n /**\n * Reset to initial state.\n */\n reset(): void {\n this.isAnimating = false;\n this.isRevealed = false;\n this.showConfetti = false;\n }\n\n formatTicketNumber(): string {\n const num = this.props.winner.ticketNumber;\n if (this.props.numberPadding) {\n return String(num).padStart(this.props.numberPadding, '0');\n }\n return String(num);\n }\n\n formatPrizeValue(): string {\n if (!this.props.winner.prizeValue) return '';\n return `$${this.props.winner.prizeValue.toLocaleString('es-MX')}`;\n }\n\n getRandomX(index: number): string {\n return `${(index * 17) % 100}%`;\n }\n\n getRandomRotation(index: number): string {\n return `${(index * 37) % 360}deg`;\n }\n\n getWinnerLabel(): string {\n if (this.props.winnerLabelContentKey && this.props.contentClass) {\n return this.langService.getText(\n this.props.contentClass,\n this.props.winnerLabelContentKey,\n this.props.winnerLabel || DEFAULT_WINNER_LABELS.winner\n );\n }\n return this.props.winnerLabel || DEFAULT_WINNER_LABELS.winner;\n }\n\n getTicketLabel(): string {\n if (this.props.ticketLabelContentKey && this.props.contentClass) {\n return this.langService.getText(\n this.props.contentClass,\n this.props.ticketLabelContentKey,\n this.props.ticketLabel || DEFAULT_WINNER_LABELS.ticket\n );\n }\n return this.props.ticketLabel || DEFAULT_WINNER_LABELS.ticket;\n }\n\n getPrizeLabel(): string {\n if (this.props.prizeLabelContentKey && this.props.contentClass) {\n return this.langService.getText(\n this.props.contentClass,\n this.props.prizeLabelContentKey,\n this.props.prizeLabel || DEFAULT_WINNER_LABELS.prize\n );\n }\n return this.props.prizeLabel || DEFAULT_WINNER_LABELS.prize;\n }\n\n getColor(): string {\n if (this.props.color) {\n return `var(--ion-color-${this.props.color})`;\n }\n return 'var(--ion-color-warning)';\n }\n}\n","import { Color } from '@ionic/core';\nimport { ImageMetadata } from '../../atoms/image/types';\nimport { ButtonMetadata } from '../../types';\n\n/**\n * Raffle status type.\n */\nexport type RaffleStatus =\n | 'upcoming' // Not started yet\n | 'active' // Currently selling tickets\n | 'sold_out' // All tickets sold\n | 'drawing' // Draw in progress\n | 'completed' // Winner announced\n | 'cancelled'; // Raffle cancelled\n\n/**\n * Raffle progress information.\n */\nexport interface RaffleProgress {\n /** Total tickets available */\n totalTickets: number;\n /** Tickets sold */\n soldTickets: number;\n /** Tickets reserved (not paid) */\n reservedTickets?: number;\n /** Goal amount (monetary) */\n goalAmount?: number;\n /** Current amount raised */\n currentAmount?: number;\n}\n\n/**\n * Prize information for the raffle.\n */\nexport interface RafflePrize {\n /** Prize name */\n name: string;\n /** Prize description */\n description?: string;\n /** Prize image */\n image?: ImageMetadata;\n /** Prize value */\n value?: number;\n /** Currency for value */\n currency?: string;\n}\n\n/**\n * Metadata for the raffle status card component.\n */\nexport interface RaffleStatusCardMetadata {\n /** Raffle title */\n title: string;\n /** Raffle description */\n description?: string;\n /** Current status */\n status: RaffleStatus;\n /** Progress information */\n progress?: RaffleProgress;\n /** Prize information */\n prize?: RafflePrize;\n /** Cover image */\n coverImage?: ImageMetadata;\n\n // === Dates ===\n /** Raffle start date */\n startDate?: Date | string;\n /** Raffle end date / draw date */\n endDate?: Date | string;\n /** Show countdown to end date */\n showCountdown?: boolean;\n\n // === Pricing ===\n /** Ticket price */\n ticketPrice?: number;\n /** Currency */\n currency?: string;\n /** Currency symbol */\n currencySymbol?: string;\n\n // === Display options ===\n /** Card variant */\n variant?: 'default' | 'featured' | 'compact' | 'horizontal';\n /** Size */\n size?: 'small' | 'medium' | 'large';\n /** Show progress bar */\n showProgress?: boolean;\n /** Show ticket stats */\n showTicketStats?: boolean;\n /** Show price */\n showPrice?: boolean;\n /** Show dates */\n showDates?: boolean;\n /** Show status badge */\n showStatusBadge?: boolean;\n\n // === Actions ===\n /** Primary action button */\n primaryAction?: ButtonMetadata;\n /** Secondary action button */\n secondaryAction?: ButtonMetadata;\n\n // === Styling ===\n /** Custom CSS class */\n cssClass?: string;\n /** Status color override */\n statusColor?: Color;\n\n // === Beneficiary ===\n /** Beneficiary name */\n beneficiary?: string;\n /** Beneficiary logo/image */\n beneficiaryImage?: ImageMetadata;\n\n // === Labels ===\n /** Custom status labels */\n statusLabels?: Partial<Record<RaffleStatus, string>>;\n\n // === Reactive content ===\n /** Content class for reactive content */\n contentClass?: string;\n /** Content key for title */\n titleContentKey?: string;\n /** Content key for description */\n descriptionContentKey?: string;\n}\n\n/**\n * Default status labels.\n */\nexport const DEFAULT_STATUS_LABELS: Record<RaffleStatus, string> = {\n upcoming: 'Próximamente',\n active: 'Activo',\n sold_out: 'Agotado',\n drawing: 'Sorteando',\n completed: 'Finalizado',\n cancelled: 'Cancelado',\n};\n\n/**\n * Default status colors.\n */\nexport const DEFAULT_STATUS_COLORS: Record<RaffleStatus, Color> = {\n upcoming: 'medium',\n active: 'success',\n sold_out: 'warning',\n drawing: 'tertiary',\n completed: 'primary',\n cancelled: 'danger',\n};\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, Output, EventEmitter, inject } from '@angular/core';\nimport { IonIcon, IonBadge, IonProgressBar } from '@ionic/angular/standalone';\nimport { addIcons } from 'ionicons';\nimport {\n ticketOutline,\n calendarOutline,\n giftOutline,\n heartOutline,\n timeOutline,\n} from 'ionicons/icons';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { ImageComponent } from '../../atoms/image/image.component';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { CountdownComponent } from '../../atoms/countdown/countdown.component';\nimport { PriceTagComponent } from '../../atoms/price-tag/price-tag.component';\nimport {\n RaffleStatusCardMetadata,\n DEFAULT_STATUS_LABELS,\n DEFAULT_STATUS_COLORS,\n} from './types';\n\naddIcons({\n ticketOutline,\n calendarOutline,\n giftOutline,\n heartOutline,\n timeOutline,\n});\n\n@Component({\n selector: 'val-raffle-status-card',\n standalone: true,\n imports: [\n CommonModule,\n IonIcon,\n IonBadge,\n IonProgressBar,\n ImageComponent,\n ButtonComponent,\n CountdownComponent,\n PriceTagComponent,\n ],\n template: `\n <article\n class=\"raffle-card\"\n [class]=\"props.cssClass\"\n [class.variant-default]=\"props.variant === 'default' || !props.variant\"\n [class.variant-featured]=\"props.variant === 'featured'\"\n [class.variant-compact]=\"props.variant === 'compact'\"\n [class.variant-horizontal]=\"props.variant === 'horizontal'\"\n [class.size-small]=\"props.size === 'small'\"\n [class.size-medium]=\"props.size === 'medium' || !props.size\"\n [class.size-large]=\"props.size === 'large'\"\n [class]=\"'status-' + props.status\"\n >\n <!-- Cover image -->\n @if (props.coverImage && props.variant !== 'compact') {\n <div class=\"card-image\">\n <val-image [props]=\"props.coverImage\"></val-image>\n\n <!-- Status badge over image -->\n @if (props.showStatusBadge !== false) {\n <ion-badge [color]=\"getStatusColor()\" class=\"status-badge\">\n {{ getStatusLabel() }}\n </ion-badge>\n }\n\n <!-- Countdown overlay -->\n @if (props.showCountdown && props.endDate && isActiveOrUpcoming) {\n <div class=\"countdown-overlay\">\n <val-countdown\n [props]=\"{\n targetDate: props.endDate,\n format: 'compact',\n size: 'small',\n color: 'light'\n }\"\n ></val-countdown>\n </div>\n }\n </div>\n }\n\n <div class=\"card-content\">\n <!-- Header -->\n <header class=\"card-header\">\n @if (props.showStatusBadge !== false && (props.variant === 'compact' || !props.coverImage)) {\n <ion-badge [color]=\"getStatusColor()\" class=\"status-badge inline\">\n {{ getStatusLabel() }}\n </ion-badge>\n }\n\n <h3 class=\"card-title\">{{ getTitle() }}</h3>\n\n @if (props.description) {\n <p class=\"card-description\">{{ getDescription() }}</p>\n }\n </header>\n\n <!-- Beneficiary -->\n @if (props.beneficiary) {\n <div class=\"beneficiary-info\">\n <ion-icon name=\"heart-outline\"></ion-icon>\n @if (props.beneficiaryImage) {\n <val-image [props]=\"props.beneficiaryImage\" class=\"beneficiary-image\"></val-image>\n }\n <span>{{ props.beneficiary }}</span>\n </div>\n }\n\n <!-- Prize preview -->\n @if (props.prize && props.variant !== 'compact') {\n <div class=\"prize-preview\">\n <div class=\"prize-header\">\n <ion-icon name=\"gift-outline\"></ion-icon>\n <span>Premio</span>\n </div>\n <div class=\"prize-name\">{{ props.prize.name }}</div>\n @if (props.prize.value) {\n <div class=\"prize-value\">\n {{ formatCurrency(props.prize.value) }}\n </div>\n }\n </div>\n }\n\n <!-- Progress -->\n @if (props.showProgress !== false && props.progress) {\n <div class=\"progress-section\">\n <div class=\"progress-header\">\n <span class=\"progress-label\">Progreso</span>\n <span class=\"progress-value\">{{ progressPercentage }}%</span>\n </div>\n <ion-progress-bar\n [value]=\"progressPercentage / 100\"\n [color]=\"getProgressColor()\"\n ></ion-progress-bar>\n </div>\n }\n\n <!-- Ticket stats -->\n @if (props.showTicketStats !== false && props.progress) {\n <div class=\"ticket-stats\">\n <div class=\"stat\">\n <ion-icon name=\"ticket-outline\"></ion-icon>\n <span class=\"stat-value\">{{ props.progress.soldTickets }}</span>\n <span class=\"stat-label\">vendidos</span>\n </div>\n <div class=\"stat-divider\"></div>\n <div class=\"stat\">\n <span class=\"stat-value\">{{ props.progress.totalTickets - props.progress.soldTickets }}</span>\n <span class=\"stat-label\">disponibles</span>\n </div>\n </div>\n }\n\n <!-- Price -->\n @if (props.showPrice !== false && props.ticketPrice) {\n <div class=\"price-section\">\n <val-price-tag\n [props]=\"{\n amount: props.ticketPrice,\n currency: props.currency || 'MXN',\n currencySymbol: props.currencySymbol,\n period: 'por boleto',\n size: props.size === 'large' ? 'large' : 'medium',\n variant: 'highlight'\n }\"\n ></val-price-tag>\n </div>\n }\n\n <!-- Dates -->\n @if (props.showDates !== false && (props.startDate || props.endDate)) {\n <div class=\"dates-section\">\n @if (props.startDate) {\n <div class=\"date-item\">\n <ion-icon name=\"calendar-outline\"></ion-icon>\n <span>Inicia: {{ formatDate(props.startDate) }}</span>\n </div>\n }\n @if (props.endDate) {\n <div class=\"date-item\">\n <ion-icon name=\"time-outline\"></ion-icon>\n <span>Sorteo: {{ formatDate(props.endDate) }}</span>\n </div>\n }\n </div>\n }\n\n <!-- Actions -->\n @if (props.primaryAction || props.secondaryAction) {\n <div class=\"card-actions\">\n @if (props.primaryAction) {\n <val-button\n [props]=\"props.primaryAction\"\n (click)=\"onPrimaryAction()\"\n ></val-button>\n }\n @if (props.secondaryAction) {\n <val-button\n [props]=\"props.secondaryAction\"\n (click)=\"onSecondaryAction()\"\n ></val-button>\n }\n </div>\n }\n </div>\n </article>\n `,\n styleUrls: ['./raffle-status-card.component.scss'],\n})\n/**\n * val-raffle-status-card\n *\n * A card component for displaying raffle status and information.\n *\n * @example Basic usage\n * ```html\n * <val-raffle-status-card\n * [props]=\"{\n * title: 'Rifa Benéfica 2024',\n * status: 'active',\n * ticketPrice: 50,\n * progress: {\n * totalTickets: 1000,\n * soldTickets: 450\n * }\n * }\"\n * ></val-raffle-status-card>\n * ```\n *\n * @example Featured with prize\n * ```html\n * <val-raffle-status-card\n * [props]=\"{\n * title: 'Gran Sorteo iPhone 15',\n * description: 'Participa y gana un iPhone 15 Pro Max',\n * status: 'active',\n * variant: 'featured',\n * coverImage: { src: 'cover.jpg' },\n * prize: {\n * name: 'iPhone 15 Pro Max 256GB',\n * value: 32000,\n * image: { src: 'iphone.jpg' }\n * },\n * ticketPrice: 100,\n * endDate: '2024-12-25',\n * showCountdown: true,\n * primaryAction: {\n * label: 'Comprar boletos',\n * color: 'success'\n * }\n * }\"\n * ></val-raffle-status-card>\n * ```\n */\nexport class RaffleStatusCardComponent {\n @Input() props: RaffleStatusCardMetadata;\n\n @Output() primaryActionClick = new EventEmitter<void>();\n @Output() secondaryActionClick = new EventEmitter<void>();\n\n private langService = inject(LangService);\n\n get isActiveOrUpcoming(): boolean {\n return this.props.status === 'active' || this.props.status === 'upcoming';\n }\n\n get progressPercentage(): number {\n if (!this.props.progress) return 0;\n const { soldTickets, totalTickets } = this.props.progress;\n if (totalTickets === 0) return 0;\n return Math.round((soldTickets / totalTickets) * 100);\n }\n\n getStatusLabel(): string {\n const labels = { ...DEFAULT_STATUS_LABELS, ...this.props.statusLabels };\n return labels[this.props.status] || this.props.status;\n }\n\n getStatusColor(): string {\n if (this.props.statusColor) return this.props.statusColor;\n return DEFAULT_STATUS_COLORS[this.props.status] || 'medium';\n }\n\n getProgressColor(): string {\n if (this.progressPercentage >= 100) return 'success';\n if (this.progressPercentage >= 75) return 'warning';\n return 'primary';\n }\n\n getTitle(): string {\n if (this.props.titleContentKey && this.props.contentClass) {\n return this.langService.getText(\n this.props.contentClass,\n this.props.titleContentKey,\n this.props.title\n );\n }\n return this.props.title;\n }\n\n getDescription(): string {\n if (this.props.descriptionContentKey && this.props.contentClass) {\n return this.langService.getText(\n this.props.contentClass,\n this.props.descriptionContentKey,\n this.props.description || ''\n );\n }\n return this.props.description || '';\n }\n\n formatCurrency(amount: number): string {\n const symbol = this.props.currencySymbol || '$';\n return `${symbol}${amount.toLocaleString('es-MX')}`;\n }\n\n formatDate(date: Date | string): string {\n const d = typeof date === 'string' ? new Date(date) : date;\n return d.toLocaleDateString('es-MX', {\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n });\n }\n\n onPrimaryAction(): void {\n this.primaryActionClick.emit();\n }\n\n onSecondaryAction(): void {\n this.secondaryActionClick.emit();\n }\n}\n","import { Color } from '@ionic/core';\nimport { AvatarMetadata } from '../../atoms/avatar/types';\n\n/**\n * Participant payment status.\n */\nexport type ParticipantPaymentStatus =\n | 'pending' // Payment not received\n | 'processing' // Payment being processed\n | 'paid' // Payment confirmed\n | 'refunded' // Payment refunded\n | 'failed'; // Payment failed\n\n/**\n * Ticket info for participant.\n */\nexport interface ParticipantTicket {\n /** Ticket number */\n number: number;\n /** Ticket status */\n status: 'active' | 'reserved' | 'cancelled' | 'winner';\n}\n\n/**\n * Participant information.\n */\nexport interface ParticipantInfo {\n /** Participant ID */\n id: string | number;\n /** Participant name */\n name: string;\n /** Participant email */\n email?: string;\n /** Participant phone */\n phone?: string;\n /** Avatar */\n avatar?: AvatarMetadata;\n /** Location */\n location?: string;\n /** Registration date */\n registrationDate?: Date | string;\n /** Tickets purchased */\n tickets: ParticipantTicket[] | number[];\n /** Payment status */\n paymentStatus?: ParticipantPaymentStatus;\n /** Total amount paid */\n amountPaid?: number;\n /** Notes */\n notes?: string;\n /** Is winner */\n isWinner?: boolean;\n /** Custom data */\n customData?: Record<string, any>;\n}\n\n/**\n * Metadata for the participant card component.\n */\nexport interface ParticipantCardMetadata {\n /** Participant information */\n participant: ParticipantInfo;\n\n // === Display options ===\n /** Card variant */\n variant?: 'default' | 'compact' | 'detailed' | 'admin';\n /** Size */\n size?: 'small' | 'medium' | 'large';\n /** Show avatar */\n showAvatar?: boolean;\n /** Show email */\n showEmail?: boolean;\n /** Show phone */\n showPhone?: boolean;\n /** Show tickets */\n showTickets?: boolean;\n /** Max tickets to show before collapsing */\n maxTicketsVisible?: number;\n /** Show payment status */\n showPaymentStatus?: boolean;\n /** Show amount */\n showAmount?: boolean;\n /** Show date */\n showDate?: boolean;\n /** Number padding for tickets */\n numberPadding?: number;\n\n // === Currency ===\n /** Currency code */\n currency?: string;\n /** Currency symbol */\n currencySymbol?: string;\n\n // === Styling ===\n /** Custom CSS class */\n cssClass?: string;\n /** Highlight if winner */\n highlightWinner?: boolean;\n\n // === Actions ===\n /** Clickable card */\n clickable?: boolean;\n /** Show action menu */\n showActions?: boolean;\n /** Actions menu items */\n actions?: ParticipantCardAction[];\n\n // === Labels ===\n /** Payment status labels */\n paymentStatusLabels?: Partial<Record<ParticipantPaymentStatus, string>>;\n\n // === Reactive content ===\n /** Content class */\n contentClass?: string;\n}\n\n/**\n * Action item for participant card.\n */\nexport interface ParticipantCardAction {\n /** Action ID */\n id: string;\n /** Action label */\n label: string;\n /** Action icon */\n icon?: string;\n /** Action color */\n color?: Color;\n /** Is destructive action */\n destructive?: boolean;\n}\n\n/**\n * Event emitted when card is clicked.\n */\nexport interface ParticipantCardClickEvent {\n /** Participant info */\n participant: ParticipantInfo;\n}\n\n/**\n * Event emitted when action is clicked.\n */\nexport interface ParticipantCardActionEvent {\n /** Action ID */\n actionId: string;\n /** Participant info */\n participant: ParticipantInfo;\n}\n\n/**\n * Default payment status labels.\n */\nexport const DEFAULT_PAYMENT_STATUS_LABELS: Record<ParticipantPaymentStatus, string> = {\n pending: 'Pendiente',\n processing: 'Procesando',\n paid: 'Pagado',\n refunded: 'Reembolsado',\n failed: 'Fallido',\n};\n\n/**\n * Default payment status colors.\n */\nexport const DEFAULT_PAYMENT_STATUS_COLORS: Record<ParticipantPaymentStatus, Color> = {\n pending: 'warning',\n processing: 'tertiary',\n paid: 'success',\n refunded: 'medium',\n failed: 'danger',\n};\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, Output, EventEmitter, inject } from '@angular/core';\nimport { IonIcon, IonBadge, IonButton, IonChip } from '@ionic/angular/standalone';\nimport { addIcons } from 'ionicons';\nimport {\n personOutline,\n mailOutline,\n callOutline,\n ticketOutline,\n locationOutline,\n calendarOutline,\n trophyOutline,\n ellipsisVertical,\n checkmarkCircle,\n timeOutline,\n closeCircle,\n} from 'ionicons/icons';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { AvatarComponent } from '../../atoms/avatar/avatar.component';\nimport {\n ParticipantCardMetadata,\n ParticipantCardClickEvent,\n ParticipantCardActionEvent,\n ParticipantTicket,\n DEFAULT_PAYMENT_STATUS_LABELS,\n DEFAULT_PAYMENT_STATUS_COLORS,\n} from './types';\n\naddIcons({\n personOutline,\n mailOutline,\n callOutline,\n ticketOutline,\n locationOutline,\n calendarOutline,\n trophyOutline,\n ellipsisVertical,\n checkmarkCircle,\n timeOutline,\n closeCircle,\n});\n\n@Component({\n selector: 'val-participant-card',\n standalone: true,\n imports: [CommonModule, IonIcon, IonBadge, IonButton, IonChip, AvatarComponent],\n template: `\n <article\n class=\"participant-card\"\n [class]=\"props.cssClass\"\n [class.variant-default]=\"props.variant === 'default' || !props.variant\"\n [class.variant-compact]=\"props.variant === 'compact'\"\n [class.variant-detailed]=\"props.variant === 'detailed'\"\n [class.variant-admin]=\"props.variant === 'admin'\"\n [class.size-small]=\"props.size === 'small'\"\n [class.size-medium]=\"props.size === 'medium' || !props.size\"\n [class.size-large]=\"props.size === 'large'\"\n [class.is-winner]=\"props.participant.isWinner && props.highlightWinner !== false\"\n [class.clickable]=\"props.clickable\"\n (click)=\"onCardClick()\"\n >\n <!-- Winner badge -->\n @if (props.participant.isWinner && props.highlightWinner !== false) {\n <div class=\"winner-badge\">\n <ion-icon name=\"trophy-outline\"></ion-icon>\n <span>Ganador</span>\n </div>\n }\n\n <!-- Main content -->\n <div class=\"card-main\">\n <!-- Avatar -->\n @if (props.showAvatar !== false) {\n <div class=\"avatar-section\">\n @if (props.participant.avatar) {\n <val-avatar [props]=\"props.participant.avatar\"></val-avatar>\n } @else {\n <div class=\"default-avatar\">\n <ion-icon name=\"person-outline\"></ion-icon>\n </div>\n }\n </div>\n }\n\n <!-- Info -->\n <div class=\"info-section\">\n <h4 class=\"participant-name\">{{ props.participant.name }}</h4>\n\n @if (props.showEmail !== false && props.participant.email) {\n <div class=\"info-item\">\n <ion-icon name=\"mail-outline\"></ion-icon>\n <span>{{ props.participant.email }}</span>\n </div>\n }\n\n @if (props.showPhone !== false && props.participant.phone) {\n <div class=\"info-item\">\n <ion-icon name=\"call-outline\"></ion-icon>\n <span>{{ props.participant.phone }}</span>\n </div>\n }\n\n @if (props.participant.location) {\n <div class=\"info-item\">\n <ion-icon name=\"location-outline\"></ion-icon>\n <span>{{ props.participant.location }}</span>\n </div>\n }\n\n @if (props.showDate !== false && props.participant.registrationDate) {\n <div class=\"info-item\">\n <ion-icon name=\"calendar-outline\"></ion-icon>\n <span>{{ formatDate(props.participant.registrationDate) }}</span>\n </div>\n }\n </div>\n\n <!-- Status & Amount (right side) -->\n <div class=\"status-section\">\n @if (props.showPaymentStatus !== false && props.participant.paymentStatus) {\n <ion-badge [color]=\"getPaymentStatusColor()\" class=\"payment-badge\">\n <ion-icon [name]=\"getPaymentStatusIcon()\"></ion-icon>\n {{ getPaymentStatusLabel() }}\n </ion-badge>\n }\n\n @if (props.showAmount !== false && props.participant.amountPaid) {\n <div class=\"amount\">\n {{ formatCurrency(props.participant.amountPaid) }}\n </div>\n }\n </div>\n\n <!-- Actions menu -->\n @if (props.showActions && props.actions?.length) {\n <ion-button\n fill=\"clear\"\n class=\"actions-button\"\n (click)=\"onActionsClick($event)\"\n >\n <ion-icon slot=\"icon-only\" name=\"ellipsis-vertical\"></ion-icon>\n </ion-button>\n }\n </div>\n\n <!-- Tickets section -->\n @if (props.showTickets !== false && ticketNumbers.length > 0) {\n <div class=\"tickets-section\">\n <div class=\"tickets-header\">\n <ion-icon name=\"ticket-outline\"></ion-icon>\n <span>{{ ticketNumbers.length }} boleto{{ ticketNumbers.length !== 1 ? 's' : '' }}</span>\n </div>\n\n <div class=\"tickets-list\">\n @for (ticket of visibleTickets; track $index) {\n <ion-chip\n [color]=\"getTicketColor(ticket)\"\n [class.winner-ticket]=\"isWinnerTicket(ticket)\"\n class=\"ticket-chip\"\n >\n @if (isWinnerTicket(ticket)) {\n <ion-icon name=\"trophy-outline\"></ion-icon>\n }\n {{ formatTicketNumber(ticket) }}\n </ion-chip>\n }\n\n @if (hiddenTicketsCount > 0) {\n <ion-chip\n color=\"medium\"\n class=\"more-tickets\"\n (click)=\"toggleShowAllTickets($event)\"\n >\n +{{ hiddenTicketsCount }} más\n </ion-chip>\n }\n </div>\n </div>\n }\n\n <!-- Notes (admin variant) -->\n @if (props.variant === 'admin' && props.participant.notes) {\n <div class=\"notes-section\">\n <span class=\"notes-label\">Notas:</span>\n <p class=\"notes-text\">{{ props.participant.notes }}</p>\n </div>\n }\n </article>\n `,\n styleUrls: ['./participant-card.component.scss'],\n})\n/**\n * val-participant-card\n *\n * A card component for displaying participant information in a raffle.\n *\n * @example Basic usage\n * ```html\n * <val-participant-card\n * [props]=\"{\n * participant: {\n * id: '1',\n * name: 'Juan Pérez',\n * email: 'juan@email.com',\n * tickets: [42, 156, 789],\n * paymentStatus: 'paid'\n * }\n * }\"\n * ></val-participant-card>\n * ```\n *\n * @example Admin variant with actions\n * ```html\n * <val-participant-card\n * [props]=\"{\n * participant: participant,\n * variant: 'admin',\n * showActions: true,\n * actions: [\n * { id: 'edit', label: 'Editar', icon: 'create-outline' },\n * { id: 'refund', label: 'Reembolsar', icon: 'cash-outline', color: 'warning' },\n * { id: 'delete', label: 'Eliminar', icon: 'trash-outline', destructive: true }\n * ]\n * }\"\n * (cardClick)=\"onParticipantClick($event)\"\n * (actionClick)=\"onActionClick($event)\"\n * ></val-participant-card>\n * ```\n *\n * @example Winner highlight\n * ```html\n * <val-participant-card\n * [props]=\"{\n * participant: {\n * id: '1',\n * name: 'María García',\n * tickets: [{ number: 42, status: 'winner' }],\n * isWinner: true,\n * paymentStatus: 'paid'\n * },\n * highlightWinner: true,\n * variant: 'detailed'\n * }\"\n * ></val-participant-card>\n * ```\n */\nexport class ParticipantCardComponent {\n @Input() props: ParticipantCardMetadata;\n\n @Output() cardClick = new EventEmitter<ParticipantCardClickEvent>();\n @Output() actionClick = new EventEmitter<ParticipantCardActionEvent>();\n\n showAllTickets = false;\n\n private langService = inject(LangService);\n\n get ticketNumbers(): (number | ParticipantTicket)[] {\n return this.props.participant.tickets || [];\n }\n\n get visibleTickets(): (number | ParticipantTicket)[] {\n const max = this.props.maxTicketsVisible || 5;\n if (this.showAllTickets || this.ticketNumbers.length <= max) {\n return this.ticketNumbers;\n }\n return this.ticketNumbers.slice(0, max);\n }\n\n get hiddenTicketsCount(): number {\n if (this.showAllTickets) return 0;\n const max = this.props.maxTicketsVisible || 5;\n return Math.max(0, this.ticketNumbers.length - max);\n }\n\n formatTicketNumber(ticket: number | ParticipantTicket): string {\n const num = typeof ticket === 'number' ? ticket : ticket.number;\n if (this.props.numberPadding) {\n return String(num).padStart(this.props.numberPadding, '0');\n }\n return String(num);\n }\n\n getTicketColor(ticket: number | ParticipantTicket): string {\n if (typeof ticket === 'number') return 'primary';\n switch (ticket.status) {\n case 'winner':\n return 'warning';\n case 'reserved':\n return 'tertiary';\n case 'cancelled':\n return 'medium';\n default:\n return 'primary';\n }\n }\n\n isWinnerTicket(ticket: number | ParticipantTicket): boolean {\n if (typeof ticket === 'number') return false;\n return ticket.status === 'winner';\n }\n\n getPaymentStatusLabel(): string {\n const status = this.props.participant.paymentStatus;\n if (!status) return '';\n const labels = { ...DEFAULT_PAYMENT_STATUS_LABELS, ...this.props.paymentStatusLabels };\n return labels[status] || status;\n }\n\n getPaymentStatusColor(): string {\n const status = this.props.participant.paymentStatus;\n if (!status) return 'medium';\n return DEFAULT_PAYMENT_STATUS_COLORS[status] || 'medium';\n }\n\n getPaymentStatusIcon(): string {\n const status = this.props.participant.paymentStatus;\n switch (status) {\n case 'paid':\n return 'checkmark-circle';\n case 'pending':\n case 'processing':\n return 'time-outline';\n case 'failed':\n case 'refunded':\n return 'close-circle';\n default:\n return 'time-outline';\n }\n }\n\n formatCurrency(amount: number): string {\n const symbol = this.props.currencySymbol || '$';\n return `${symbol}${amount.toLocaleString('es-MX')}`;\n }\n\n formatDate(date: Date | string): string {\n const d = typeof date === 'string' ? new Date(date) : date;\n return d.toLocaleDateString('es-MX', {\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n });\n }\n\n toggleShowAllTickets(event: Event): void {\n event.stopPropagation();\n this.showAllTickets = !this.showAllTickets;\n }\n\n onCardClick(): void {\n if (!this.props.clickable) return;\n this.cardClick.emit({\n participant: this.props.participant,\n });\n }\n\n onActionsClick(event: Event): void {\n event.stopPropagation();\n // In a real implementation, this would open a popover menu\n // For now, we'll emit the first action\n if (this.props.actions?.length) {\n this.actionClick.emit({\n actionId: this.props.actions[0].id,\n participant: this.props.participant,\n });\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\nimport { IonIcon } from '@ionic/angular/standalone';\nimport { addIcons } from 'ionicons';\nimport { arrowForwardOutline } from 'ionicons/icons';\nimport { Observable, of } from 'rxjs';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { NavigationService } from '../../../services/navigation.service';\nimport { ThemeService } from '../../../services/theme.service';\nimport { GlowCardClickEvent, GlowCardMetadata } from './types';\n\n/**\n * val-glow-card\n *\n * A card component featuring an image with zoom-on-hover, animated CTA link,\n * and dynamic glow effect that adapts to light/dark mode.\n *\n * @example\n * <val-glow-card\n * [props]=\"{\n * imageSrc: 'https://example.com/image.jpg',\n * imageAlt: 'Example image',\n * title: 'Card Title',\n * description: 'Card description text',\n * cta: { text: 'Learn More', url: '/details', type: 'internal' }\n * }\"\n * (onClick)=\"handleClick($event)\"\n * ></val-glow-card>\n *\n * @input props: GlowCardMetadata - Configuration for the card\n * @output onClick - Emits GlowCardClickEvent when card, image, or CTA is clicked\n */\n@Component({\n selector: 'val-glow-card',\n standalone: true,\n imports: [CommonModule, IonIcon],\n template: `\n <article\n class=\"glow-card\"\n [class.glow-enabled]=\"props.glow?.enabled !== false\"\n [class.glow-subtle]=\"props.glow?.intensity === 'subtle'\"\n [class.glow-medium]=\"!props.glow?.intensity || props.glow?.intensity === 'medium'\"\n [class.glow-intense]=\"props.glow?.intensity === 'intense'\"\n [class.dark-mode]=\"isDark\"\n [class.bordered]=\"props.bordered\"\n [style.--glow-color]=\"getGlowColor()\"\n [style.--glow-color-rgb]=\"getGlowColorRgb()\"\n [style.--aspect-ratio]=\"getAspectRatioValue()\"\n [style.--border-color]=\"getBorderColor()\"\n (click)=\"onCardClick($event)\"\n >\n <!-- Image Container with overflow hidden for zoom effect -->\n <div class=\"glow-card__image-container\">\n <img\n class=\"glow-card__image\"\n [src]=\"props.imageSrc\"\n [alt]=\"props.imageAlt\"\n (click)=\"onImageClick($event)\"\n />\n </div>\n\n <!-- Content Section -->\n <div class=\"glow-card__content\">\n <!-- Title -->\n <h3 class=\"glow-card__title\">\n {{ title$ | async }}\n </h3>\n\n <!-- Description -->\n <p class=\"glow-card__description\">\n {{ description$ | async }}\n </p>\n\n <!-- CTA Link with expanding animation -->\n <a\n class=\"glow-card__cta\"\n [href]=\"props.cta.url\"\n (click)=\"onCtaClick($event)\"\n >\n <span class=\"glow-card__cta-text\">{{ ctaText$ | async }}</span>\n <ion-icon\n class=\"glow-card__cta-icon\"\n [name]=\"props.cta.icon || 'arrow-forward-outline'\"\n ></ion-icon>\n </a>\n </div>\n </article>\n `,\n styleUrls: ['./glow-card.component.scss'],\n})\nexport class GlowCardComponent implements OnInit {\n @Input()\n props!: GlowCardMetadata;\n\n @Output()\n onClick = new EventEmitter<GlowCardClickEvent>();\n\n private langService = inject(LangService);\n private navigationService = inject(NavigationService);\n private themeService = inject(ThemeService);\n\n title$: Observable<string> = of('');\n description$: Observable<string> = of('');\n ctaText$: Observable<string> = of('');\n\n private readonly ionicColors = ['primary', 'secondary', 'tertiary', 'success', 'warning', 'danger', 'light', 'medium', 'dark'];\n\n // RGB values with SPACE separator for CSS rgb(var() / alpha) syntax\n private readonly colorRgbMap: Record<string, string> = {\n primary: '112 38 223',\n secondary: '226 204 255',\n tertiary: '82 96 255',\n success: '45 211 111',\n warning: '255 196 9',\n danger: '235 68 90',\n };\n\n constructor() {\n addIcons({ arrowForwardOutline });\n }\n\n ngOnInit() {\n this.initializeContent();\n }\n\n get isDark(): boolean {\n return this.themeService.IsDark;\n }\n\n private initializeContent() {\n // Title: static or reactive\n if (this.props.title) {\n this.title$ = of(this.props.title);\n } else if (this.props.titleKey && this.props.titleClass) {\n this.title$ = this.langService.getContent(\n this.props.titleClass,\n this.props.titleKey,\n this.props.titleFallback\n );\n }\n\n // Description: static or reactive\n if (this.props.description) {\n this.description$ = of(this.props.description);\n } else if (this.props.descriptionKey && this.props.descriptionClass) {\n this.description$ = this.langService.getContent(\n this.props.descriptionClass,\n this.props.descriptionKey,\n this.props.descriptionFallback\n );\n }\n\n // CTA Text: static or reactive\n if (this.props.cta.text) {\n this.ctaText$ = of(this.props.cta.text);\n } else if (this.props.cta.contentKey && this.props.cta.contentClass) {\n this.ctaText$ = this.langService.getContent(\n this.props.cta.contentClass,\n this.props.cta.contentKey,\n this.props.cta.contentFallback\n );\n }\n }\n\n getGlowColor(): string {\n const color = this.props.glow?.color;\n if (!color) {\n return 'var(--ion-color-primary)';\n }\n\n if (this.ionicColors.includes(color as string)) {\n return `var(--ion-color-${color})`;\n }\n\n return color as string;\n }\n\n getGlowColorRgb(): string {\n const color = this.props.glow?.color;\n if (!color) {\n return '112 38 223'; // Default primary color (space-separated for CSS)\n }\n\n if (this.ionicColors.includes(color as string)) {\n const rgb = this.colorRgbMap[color as string];\n return rgb ? rgb : '112 38 223';\n }\n\n // For custom hex colors, try to convert\n if (typeof color === 'string' && color.startsWith('#')) {\n return this.hexToRgb(color);\n }\n\n return '112 38 223';\n }\n\n private hexToRgb(hex: string): string {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n if (result) {\n // Space-separated for CSS rgb(var() / alpha) syntax\n return `${parseInt(result[1], 16)} ${parseInt(result[2], 16)} ${parseInt(result[3], 16)}`;\n }\n return '112 38 223';\n }\n\n getAspectRatioValue(): string {\n const ratioMap: Record<string, string> = {\n '16:9': '16 / 9',\n '4:3': '4 / 3',\n '1:1': '1 / 1',\n '3:2': '3 / 2',\n '21:9': '21 / 9',\n };\n return ratioMap[this.props.aspectRatio || '16:9'];\n }\n\n getBorderColor(): string {\n const color = this.props.borderColor;\n if (!color) {\n return 'var(--ion-color-medium)';\n }\n\n if (this.ionicColors.includes(color as string)) {\n return `var(--ion-color-${color})`;\n }\n\n return color as string;\n }\n\n onCardClick(event: MouseEvent) {\n if ((event.target as HTMLElement).closest('.glow-card__cta, .glow-card__image')) {\n return;\n }\n this.onClick.emit({ target: 'card', token: this.props.token });\n }\n\n onImageClick(event: MouseEvent) {\n event.stopPropagation();\n this.onClick.emit({ target: 'image', token: this.props.token });\n }\n\n onCtaClick(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n\n this.onClick.emit({\n target: 'cta',\n token: this.props.token,\n url: this.props.cta.url,\n });\n\n switch (this.props.cta.type) {\n case 'internal':\n this.navigationService.navigateByUrl(this.props.cta.url);\n break;\n case 'browse':\n this.navigationService.navigateInApp(this.props.cta.url);\n break;\n case 'tab':\n this.navigationService.openInNewTab(this.props.cta.url);\n break;\n }\n }\n}\n","import { Color } from '@ionic/core';\n\n/**\n * Aspect ratio options for the glow-card image\n */\nexport type GlowCardAspectRatio = '16:9' | '4:3' | '1:1' | '3:2' | '21:9';\n\n/**\n * CTA (Call-to-Action) configuration for glow-card\n */\nexport interface GlowCardCTA {\n /** CTA text (static) */\n text?: string;\n /** Content key for i18n support */\n contentKey?: string;\n /** Component class name for content lookup */\n contentClass?: string;\n /** Fallback text if contentKey not found */\n contentFallback?: string;\n /** URL to navigate to */\n url: string;\n /** Navigation type */\n type: 'internal' | 'tab' | 'browse';\n /** Icon name (defaults to 'arrow-forward-outline') */\n icon?: string;\n}\n\n/**\n * Glow effect configuration\n */\nexport interface GlowConfig {\n /** Whether glow is enabled (default: true) */\n enabled?: boolean;\n /** Custom glow color - uses CSS color or Ionic color name */\n color?: Color | string;\n /** Glow intensity (default: 'medium') */\n intensity?: 'subtle' | 'medium' | 'intense';\n}\n\n/**\n * Event emitted when glow-card is clicked\n */\nexport interface GlowCardClickEvent {\n /** Click target */\n target: 'card' | 'cta' | 'image';\n /** Optional token for identification */\n token?: string;\n /** CTA URL if CTA was clicked */\n url?: string;\n}\n\n/**\n * Props for val-glow-card component.\n *\n * A card component with image, title, description, and animated CTA.\n * Features hover states with image zoom, expanding CTA link, and glow effect.\n */\nexport interface GlowCardMetadata {\n /** Unique token for event identification */\n token?: string;\n\n /** Image source URL */\n imageSrc: string;\n /** Image alt text */\n imageAlt: string;\n /** Image aspect ratio (default: '16:9') */\n aspectRatio?: GlowCardAspectRatio;\n\n /** Static title text */\n title?: string;\n /** Title content key for i18n */\n titleKey?: string;\n /** Title content class for i18n lookup */\n titleClass?: string;\n /** Title fallback text */\n titleFallback?: string;\n\n /** Static description text */\n description?: string;\n /** Description content key for i18n */\n descriptionKey?: string;\n /** Description content class for i18n lookup */\n descriptionClass?: string;\n /** Description fallback text */\n descriptionFallback?: string;\n\n /** CTA configuration */\n cta: GlowCardCTA;\n\n /** Glow effect configuration */\n glow?: GlowConfig;\n\n /** Card background color (optional) */\n backgroundColor?: Color | string;\n\n /** Show border around the card (default: false) */\n bordered?: boolean;\n\n /** Border color - uses CSS color or Ionic color name (default: 'medium') */\n borderColor?: Color | string;\n}\n\n/**\n * Factory function to create GlowCardMetadata with defaults\n */\nexport function createGlowCardProps(\n overrides: Partial<GlowCardMetadata> & Pick<GlowCardMetadata, 'imageSrc' | 'imageAlt' | 'cta'>\n): GlowCardMetadata {\n return {\n aspectRatio: '16:9',\n glow: { enabled: true, intensity: 'medium' },\n ...overrides,\n };\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { ImageComponent } from '../../atoms/image/image.component';\nimport { ImageMetadata } from '../../atoms/image/types';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { TitleComponent } from '../../atoms/title/title.component';\nimport {\n ArticleButtonElement,\n ArticleCodeElement,\n ArticleCustomElement,\n ArticleElement,\n ArticleHighlightElement,\n ArticleImageElement,\n ArticleListElement,\n ArticleMetadata,\n ArticleQuoteElement,\n ArticleSeparatorElement,\n ArticleSubtitleElement,\n ArticleTextElement,\n ArticleTitleElement,\n ArticleVideoElement,\n} from './types';\n\n@Component({\n selector: 'val-article',\n standalone: true,\n imports: [CommonModule, TitleComponent, TextComponent, ButtonComponent, ImageComponent],\n template: `\n <article\n class=\"val-article\"\n [class]=\"props.cssClass\"\n [ngClass]=\"{\n 'val-article--centered': props.centered,\n 'val-article--light': props.theme === 'light',\n 'val-article--dark': props.theme === 'dark',\n }\"\n [style.max-width]=\"props.maxWidth\"\n >\n <div\n *ngFor=\"let element of props.elements; trackBy: trackByFn\"\n class=\"val-article__element\"\n [class]=\"element.cssClass\"\n [ngClass]=\"getElementSpacingClass(element)\"\n [style.display]=\"element.visible === false ? 'none' : 'block'\"\n >\n <!-- Título -->\n <ng-container *ngIf=\"element.type === 'title'\">\n <val-title [props]=\"getTitleElement(element).props\"></val-title>\n </ng-container>\n\n <!-- Subtítulo -->\n <ng-container *ngIf=\"element.type === 'subtitle'\">\n <val-title [props]=\"getSubtitleElement(element).props\"></val-title>\n </ng-container>\n\n <!-- Texto/Párrafo -->\n <ng-container *ngIf=\"element.type === 'text' || element.type === 'paragraph'\">\n <val-text [props]=\"getTextElement(element).props\"></val-text>\n </ng-container>\n\n <!-- Cita -->\n <ng-container *ngIf=\"element.type === 'quote'\">\n <div class=\"val-article__quote\">\n <div class=\"val-article__quote-content\">\n <val-text [props]=\"getQuoteTextProps(element)\"></val-text>\n </div>\n <div *ngIf=\"getQuoteElement(element).props.author\" class=\"val-article__quote-author\">\n — {{ getQuoteElement(element).props.author }}\n <span *ngIf=\"getQuoteElement(element).props.source\" class=\"val-article__quote-source\">\n , {{ getQuoteElement(element).props.source }}\n </span>\n </div>\n </div>\n </ng-container>\n\n <!-- Texto destacado -->\n <ng-container *ngIf=\"element.type === 'highlight'\">\n <div\n class=\"val-article__highlight\"\n [ngClass]=\"{\n 'val-article__highlight--rounded': getHighlightElement(element).props.rounded,\n }\"\n [style.background-color]=\"getHighlightColor(element)\"\n >\n <val-text [props]=\"getHighlightTextProps(element)\"></val-text>\n </div>\n </ng-container>\n\n <!-- Código -->\n <ng-container *ngIf=\"element.type === 'code'\">\n <div class=\"val-article__code\">\n <div *ngIf=\"getCodeElement(element).props.language\" class=\"val-article__code-language\">\n {{ getCodeElement(element).props.language }}\n </div>\n <pre\n class=\"val-article__code-content\"\n [ngClass]=\"{\n 'val-article__code-content--dark': getCodeElement(element).props.theme === 'dark',\n }\"\n ><code>{{ getCodeElement(element).props.code }}</code></pre>\n </div>\n </ng-container>\n\n <!-- Lista -->\n <ng-container *ngIf=\"element.type === 'list'\">\n <ul *ngIf=\"getListElement(element).props.listType !== 'ordered'\" class=\"val-article__list\">\n <li *ngFor=\"let item of getListElement(element).props.items\" class=\"val-article__list-item\">\n <span *ngIf=\"getListElement(element).props.listType === 'checklist'\" class=\"val-article__list-check\"\n >✓</span\n >\n {{ item.text }}\n </li>\n </ul>\n <ol\n *ngIf=\"getListElement(element).props.listType === 'ordered'\"\n class=\"val-article__list val-article__list--ordered\"\n >\n <li *ngFor=\"let item of getListElement(element).props.items\" class=\"val-article__list-item\">\n {{ item.text }}\n </li>\n </ol>\n </ng-container>\n\n <!-- Botón -->\n <ng-container *ngIf=\"element.type === 'button'\">\n <div\n class=\"val-article__button-container\"\n [ngClass]=\"{\n 'val-article__button-container--left': getButtonElement(element).props.alignment === 'left',\n 'val-article__button-container--center': getButtonElement(element).props.alignment === 'center',\n 'val-article__button-container--right': getButtonElement(element).props.alignment === 'right',\n }\"\n >\n <val-button [props]=\"getButtonProps(element)\"></val-button>\n </div>\n </ng-container>\n\n <!-- Separador -->\n <ng-container *ngIf=\"element.type === 'separator'\">\n <div class=\"val-article__separator\">\n <hr\n *ngIf=\"getSeparatorElement(element).props.style === 'line'\"\n class=\"val-article__separator-line\"\n [ngClass]=\"{\n 'val-article__separator-line--thin': getSeparatorElement(element).props.thickness === 'thin',\n 'val-article__separator-line--thick': getSeparatorElement(element).props.thickness === 'thick',\n }\"\n />\n <div *ngIf=\"getSeparatorElement(element).props.style === 'dots'\" class=\"val-article__separator-dots\">\n • • •\n </div>\n <div\n *ngIf=\"getSeparatorElement(element).props.style === 'space'\"\n class=\"val-article__separator-space\"\n ></div>\n </div>\n </ng-container>\n\n <!-- Imagen -->\n <ng-container *ngIf=\"element.type === 'image'\">\n <val-image [props]=\"getImageMetadata(element)\"></val-image>\n </ng-container>\n\n <!-- Video -->\n <ng-container *ngIf=\"element.type === 'video'\">\n <div class=\"val-article__video\">\n <video\n [src]=\"getVideoElement(element).props.src\"\n [poster]=\"getVideoElement(element).props.poster\"\n [controls]=\"getVideoElement(element).props.controls !== false\"\n [autoplay]=\"getVideoElement(element).props.autoplay\"\n [muted]=\"getVideoElement(element).props.muted\"\n [style.max-width]=\"getVideoElement(element).props.maxWidth\"\n class=\"val-article__video-content\"\n >\n Tu navegador no soporta el elemento video.\n </video>\n <div *ngIf=\"getVideoElement(element).props.title\" class=\"val-article__video-title\">\n {{ getVideoElement(element).props.title }}\n </div>\n </div>\n </ng-container>\n\n <!-- Contenido personalizado -->\n <ng-container *ngIf=\"element.type === 'custom'\">\n <div class=\"val-article__custom\" [innerHTML]=\"getCustomElement(element).props.htmlContent\"></div>\n </ng-container>\n </div>\n </article>\n `,\n styleUrls: ['./article.component.scss'],\n // changeDetection: ChangeDetectionStrategy.OnPush, // Comentado temporalmente para debug\n})\n/**\n * val-article\n *\n * Componente para crear artículos, blogs y documentación de forma declarativa.\n * Permite combinar múltiples elementos (títulos, texto, imágenes, código, etc.)\n * con espaciado automático y soporte multi-idioma.\n *\n * @example Uso básico:\n * ```html\n * <val-article [props]=\"articleConfig\"></val-article>\n * ```\n *\n * @example Con ArticleBuilder:\n * ```typescript\n * articleConfig = new ArticleBuilder()\n * .title(titleProps)\n * .paragraph(textProps)\n * .code('console.log(\"Hello World\")', 'javascript')\n * .build();\n * ```\n *\n * @input props: ArticleMetadata - Configuración completa del artículo\n */\nexport class ArticleComponent implements OnInit {\n /**\n * Configuración del artículo\n * @type {ArticleMetadata}\n */\n @Input()\n props!: ArticleMetadata;\n\n constructor() {}\n\n ngOnInit() {\n // Validación básica\n if (!this.props || !this.props.elements) {\n console.warn('val-article: props.elements is required');\n }\n }\n\n /**\n * Función de trackBy para optimizar el rendering de elementos\n */\n trackByFn(index: number, element: ArticleElement): any {\n return element.id || index;\n }\n\n /**\n * Obtiene las clases CSS para el espaciado del elemento\n */\n getElementSpacingClass(element: ArticleElement): string {\n const spacing = element.spacing || this.props.defaultSpacing;\n const classes: string[] = [];\n\n if (spacing?.top) {\n classes.push(`val-article__spacing-top--${spacing.top}`);\n }\n if (spacing?.bottom) {\n classes.push(`val-article__spacing-bottom--${spacing.bottom}`);\n }\n if (spacing?.horizontal) {\n classes.push(`val-article__spacing-horizontal--${spacing.horizontal}`);\n }\n\n return classes.join(' ');\n }\n\n // === FUNCIONES DE TIPO PARA TYPESCRIPT ===\n\n getTitleElement(element: ArticleElement): ArticleTitleElement {\n return element as ArticleTitleElement;\n }\n\n getSubtitleElement(element: ArticleElement): ArticleSubtitleElement {\n return element as ArticleSubtitleElement;\n }\n\n getTextElement(element: ArticleElement): ArticleTextElement {\n return element as ArticleTextElement;\n }\n\n getQuoteElement(element: ArticleElement): ArticleQuoteElement {\n return element as ArticleQuoteElement;\n }\n\n getHighlightElement(element: ArticleElement): ArticleHighlightElement {\n return element as ArticleHighlightElement;\n }\n\n getCodeElement(element: ArticleElement): ArticleCodeElement {\n return element as ArticleCodeElement;\n }\n\n getListElement(element: ArticleElement): ArticleListElement {\n return element as ArticleListElement;\n }\n\n getButtonElement(element: ArticleElement): ArticleButtonElement {\n return element as ArticleButtonElement;\n }\n\n getSeparatorElement(element: ArticleElement): ArticleSeparatorElement {\n return element as ArticleSeparatorElement;\n }\n\n getImageElement(element: ArticleElement): ArticleImageElement {\n return element as ArticleImageElement;\n }\n\n getVideoElement(element: ArticleElement): ArticleVideoElement {\n return element as ArticleVideoElement;\n }\n\n getCustomElement(element: ArticleElement): ArticleCustomElement {\n return element as ArticleCustomElement;\n }\n\n // === FUNCIONES AUXILIARES PARA PROPS ===\n\n getQuoteTextProps(element: ArticleElement) {\n const quoteElement = this.getQuoteElement(element);\n const { author, source, ...textProps } = quoteElement.props;\n return textProps;\n }\n\n getHighlightTextProps(element: ArticleElement) {\n const highlightElement = this.getHighlightElement(element);\n const { backgroundColor, rounded, ...textProps } = highlightElement.props;\n return textProps;\n }\n\n getHighlightColor(element: ArticleElement): string {\n const highlightElement = this.getHighlightElement(element);\n return highlightElement.props.backgroundColor || 'var(--ion-color-light)';\n }\n\n getButtonProps(element: ArticleElement) {\n const buttonElement = this.getButtonElement(element);\n const { alignment, ...buttonProps } = buttonElement.props;\n return buttonProps;\n }\n\n getImageMetadata(element: ArticleElement): ImageMetadata {\n const imageElement = this.getImageElement(element);\n const props = imageElement.props;\n\n return {\n src: props.src,\n alt: props.alt,\n mode: props.rounded ? 'rounded' : 'box',\n size: 'medium',\n shaded: false,\n bordered: false,\n alignment: props.alignment || 'center',\n caption: props.caption,\n captionSize: 'medium' as const,\n width: props.maxWidth ? parseInt(props.maxWidth.replace('px', '')) : undefined,\n };\n }\n}\n","import { Color } from '@ionic/core';\nimport { TextMetadata } from '../../atoms/text/types';\nimport { TitleMetadata } from '../../atoms/title/types';\nimport { ButtonMetadata } from '../../types';\n\n/**\n * Tipos de contenido soportados en el componente val-article\n */\nexport type ArticleContentType =\n | 'title'\n | 'subtitle'\n | 'text'\n | 'paragraph'\n | 'quote'\n | 'highlight'\n | 'code'\n | 'list'\n | 'button'\n | 'separator'\n | 'image'\n | 'video'\n | 'custom';\n\n/**\n * Configuración de espaciado entre elementos\n */\nexport interface ArticleSpacing {\n /** Espaciado superior */\n top?: 'none' | 'small' | 'medium' | 'large' | 'xlarge';\n /** Espaciado inferior */\n bottom?: 'none' | 'small' | 'medium' | 'large' | 'xlarge';\n /** Espaciado lateral */\n horizontal?: 'none' | 'small' | 'medium' | 'large' | 'xlarge';\n}\n\n/**\n * Configuración base para cualquier elemento del artículo\n */\nexport interface BaseArticleElement {\n /** Tipo de elemento */\n type: ArticleContentType;\n /** ID único del elemento (opcional) */\n id?: string;\n /** Clases CSS adicionales */\n cssClass?: string;\n /** Configuración de espaciado */\n spacing?: ArticleSpacing;\n /** Elemento visible condicionalmente */\n visible?: boolean;\n}\n\n/**\n * Elemento de título\n */\nexport interface ArticleTitleElement extends BaseArticleElement {\n type: 'title';\n props: TitleMetadata;\n}\n\n/**\n * Elemento de subtítulo\n */\nexport interface ArticleSubtitleElement extends BaseArticleElement {\n type: 'subtitle';\n props: TitleMetadata;\n}\n\n/**\n * Elemento de texto/párrafo\n */\nexport interface ArticleTextElement extends BaseArticleElement {\n type: 'text' | 'paragraph';\n props: TextMetadata;\n}\n\n/**\n * Elemento de cita\n */\nexport interface ArticleQuoteElement extends BaseArticleElement {\n type: 'quote';\n props: TextMetadata & {\n /** Autor de la cita */\n author?: string;\n /** Fuente de la cita */\n source?: string;\n };\n}\n\n/**\n * Elemento de texto destacado\n */\nexport interface ArticleHighlightElement extends BaseArticleElement {\n type: 'highlight';\n props: TextMetadata & {\n /** Color de fondo del highlight */\n backgroundColor?: Color;\n /** Esquinas redondeadas */\n rounded?: boolean;\n };\n}\n\n/**\n * Elemento de código\n */\nexport interface ArticleCodeElement extends BaseArticleElement {\n type: 'code';\n props: {\n /** Código a mostrar */\n code: string;\n /** Lenguaje de programación */\n language?: string;\n /** Mostrar números de línea */\n showLineNumbers?: boolean;\n /** Tema del código */\n theme?: 'light' | 'dark';\n };\n}\n\n/**\n * Elemento de lista\n */\nexport interface ArticleListElement extends BaseArticleElement {\n type: 'list';\n props: {\n /** Elementos de la lista */\n items: Array<{\n /** Texto del elemento */\n text: string;\n /** Configuración de contenido reactivo */\n contentKey?: string;\n contentClass?: string;\n contentFallback?: string;\n contentInterpolation?: Record<string, string | number>;\n }>;\n /** Tipo de lista */\n listType?: 'unordered' | 'ordered' | 'checklist';\n /** Color de los elementos */\n color?: Color;\n };\n}\n\n/**\n * Elemento de botón\n */\nexport interface ArticleButtonElement extends BaseArticleElement {\n type: 'button';\n props: ButtonMetadata & {\n /** Alineación del botón */\n alignment?: 'left' | 'center' | 'right';\n };\n}\n\n/**\n * Elemento separador\n */\nexport interface ArticleSeparatorElement extends BaseArticleElement {\n type: 'separator';\n props: {\n /** Tipo de separador */\n style?: 'line' | 'dots' | 'space';\n /** Color del separador */\n color?: Color;\n /** Grosor del separador */\n thickness?: 'thin' | 'medium' | 'thick';\n };\n}\n\n/**\n * Elemento de imagen\n */\nexport interface ArticleImageElement extends BaseArticleElement {\n type: 'image';\n props: {\n /** URL de la imagen */\n src: string;\n /** Texto alternativo */\n alt: string;\n /** Título de la imagen */\n title?: string;\n /** Leyenda de la imagen */\n caption?: string;\n /** Configuración de contenido reactivo para caption */\n captionContentKey?: string;\n captionContentClass?: string;\n captionContentFallback?: string;\n /** Alineación de la imagen */\n alignment?: 'left' | 'center' | 'right';\n /** Ancho máximo */\n maxWidth?: string;\n /** Imagen con bordes redondeados */\n rounded?: boolean;\n };\n}\n\n/**\n * Elemento de video\n */\nexport interface ArticleVideoElement extends BaseArticleElement {\n type: 'video';\n props: {\n /** URL del video */\n src: string;\n /** Imagen de poster */\n poster?: string;\n /** Título del video */\n title?: string;\n /** Controles visibles */\n controls?: boolean;\n /** Reproducción automática */\n autoplay?: boolean;\n /** Silenciado por defecto */\n muted?: boolean;\n /** Ancho máximo */\n maxWidth?: string;\n };\n}\n\n/**\n * Elemento personalizado\n */\nexport interface ArticleCustomElement extends BaseArticleElement {\n type: 'custom';\n props: {\n /** Contenido HTML personalizado */\n htmlContent?: string;\n /** Clase de componente personalizado */\n componentClass?: any;\n /** Props para el componente personalizado */\n componentProps?: any;\n };\n}\n\n/**\n * Unión de todos los tipos de elementos posibles\n */\nexport type ArticleElement =\n | ArticleTitleElement\n | ArticleSubtitleElement\n | ArticleTextElement\n | ArticleQuoteElement\n | ArticleHighlightElement\n | ArticleCodeElement\n | ArticleListElement\n | ArticleButtonElement\n | ArticleSeparatorElement\n | ArticleImageElement\n | ArticleVideoElement\n | ArticleCustomElement;\n\n/**\n * Configuración del artículo completo\n */\nexport interface ArticleMetadata {\n /** Elementos del artículo */\n elements: ArticleElement[];\n /** Configuración de espaciado global */\n defaultSpacing?: ArticleSpacing;\n /** Ancho máximo del artículo */\n maxWidth?: string;\n /** Centrar el artículo */\n centered?: boolean;\n /** Tema del artículo */\n theme?: 'light' | 'dark' | 'auto';\n /** Clases CSS adicionales */\n cssClass?: string;\n}\n\n/**\n * Configuración de espaciado predefinida\n */\nexport const ARTICLE_SPACING = {\n NONE: { top: 'none', bottom: 'none' } as ArticleSpacing,\n SMALL: { top: 'small', bottom: 'small' } as ArticleSpacing,\n MEDIUM: { top: 'medium', bottom: 'medium' } as ArticleSpacing,\n LARGE: { top: 'large', bottom: 'large' } as ArticleSpacing,\n XLARGE: { top: 'xlarge', bottom: 'xlarge' } as ArticleSpacing,\n\n // Espaciados específicos para elementos\n TITLE: { top: 'large', bottom: 'medium' } as ArticleSpacing,\n SUBTITLE: { top: 'medium', bottom: 'small' } as ArticleSpacing,\n PARAGRAPH: { top: 'small', bottom: 'medium' } as ArticleSpacing,\n QUOTE: { top: 'medium', bottom: 'medium' } as ArticleSpacing,\n CODE: { top: 'medium', bottom: 'medium' } as ArticleSpacing,\n LIST: { top: 'small', bottom: 'medium' } as ArticleSpacing,\n BUTTON: { top: 'medium', bottom: 'medium' } as ArticleSpacing,\n IMAGE: { top: 'large', bottom: 'large' } as ArticleSpacing,\n SEPARATOR: { top: 'large', bottom: 'large' } as ArticleSpacing,\n} as const;\n\n/**\n * Función helper para crear elementos de artículo de forma fácil\n */\nexport class ArticleBuilder {\n private elements: ArticleElement[] = [];\n\n /**\n * Añade un título al artículo\n */\n title(props: TitleMetadata, options?: Partial<BaseArticleElement>): ArticleBuilder {\n this.elements.push({\n type: 'title',\n props,\n spacing: ARTICLE_SPACING.TITLE,\n ...options,\n } as ArticleTitleElement);\n return this;\n }\n\n /**\n * Añade un subtítulo al artículo\n */\n subtitle(props: TitleMetadata, options?: Partial<BaseArticleElement>): ArticleBuilder {\n this.elements.push({\n type: 'subtitle',\n props,\n spacing: ARTICLE_SPACING.SUBTITLE,\n ...options,\n } as ArticleSubtitleElement);\n return this;\n }\n\n /**\n * Añade un párrafo al artículo\n */\n paragraph(props: TextMetadata, options?: Partial<BaseArticleElement>): ArticleBuilder {\n this.elements.push({\n type: 'paragraph',\n props,\n spacing: ARTICLE_SPACING.PARAGRAPH,\n ...options,\n } as ArticleTextElement);\n return this;\n }\n\n /**\n * Añade una cita al artículo\n */\n quote(\n props: ArticleQuoteElement['props'],\n options?: Partial<BaseArticleElement>\n ): ArticleBuilder {\n this.elements.push({\n type: 'quote',\n props,\n spacing: ARTICLE_SPACING.QUOTE,\n ...options,\n } as ArticleQuoteElement);\n return this;\n }\n\n /**\n * Añade código al artículo\n */\n code(code: string, language?: string, options?: Partial<BaseArticleElement>): ArticleBuilder {\n this.elements.push({\n type: 'code',\n props: { code, language },\n spacing: ARTICLE_SPACING.CODE,\n ...options,\n } as ArticleCodeElement);\n return this;\n }\n\n /**\n * Añade una lista al artículo\n */\n list(\n items: ArticleListElement['props']['items'],\n listType?: ArticleListElement['props']['listType'],\n options?: Partial<BaseArticleElement>\n ): ArticleBuilder {\n this.elements.push({\n type: 'list',\n props: { items, listType },\n spacing: ARTICLE_SPACING.LIST,\n ...options,\n } as ArticleListElement);\n return this;\n }\n\n /**\n * Añade un botón al artículo\n */\n button(\n props: ButtonMetadata,\n alignment?: 'left' | 'center' | 'right',\n options?: Partial<BaseArticleElement>\n ): ArticleBuilder {\n this.elements.push({\n type: 'button',\n props: { ...props, alignment },\n spacing: ARTICLE_SPACING.BUTTON,\n ...options,\n } as ArticleButtonElement);\n return this;\n }\n\n /**\n * Añade un separador al artículo\n */\n separator(\n style?: 'line' | 'dots' | 'space',\n options?: Partial<BaseArticleElement>\n ): ArticleBuilder {\n this.elements.push({\n type: 'separator',\n props: { style },\n spacing: ARTICLE_SPACING.SEPARATOR,\n ...options,\n } as ArticleSeparatorElement);\n return this;\n }\n\n /**\n * Añade una imagen al artículo\n */\n image(\n src: string,\n alt: string,\n caption?: string,\n options?: Partial<BaseArticleElement>\n ): ArticleBuilder {\n this.elements.push({\n type: 'image',\n props: { src, alt, caption },\n spacing: ARTICLE_SPACING.IMAGE,\n ...options,\n } as ArticleImageElement);\n return this;\n }\n\n /**\n * Construye el artículo final\n */\n build(config?: Partial<ArticleMetadata>): ArticleMetadata {\n return {\n elements: this.elements,\n defaultSpacing: ARTICLE_SPACING.MEDIUM,\n maxWidth: '800px',\n centered: true,\n theme: 'auto',\n ...config,\n };\n }\n\n /**\n * Resetea el builder para crear un nuevo artículo\n */\n clear(): ArticleBuilder {\n this.elements = [];\n return this;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { BoxComponent } from '../../atoms/box/box.component';\nimport { ButtonGroupComponent } from '../../molecules/button-group/button-group.component';\nimport { TitleBlockComponent } from '../../molecules/title-block/title-block.component';\nimport { BannerMetadata } from './types';\n\n@Component({\n selector: 'val-banner',\n standalone: true,\n imports: [CommonModule, BoxComponent, TitleBlockComponent, ButtonGroupComponent],\n template: `\n <val-box\n [props]=\"{\n icon: props.closable ? 'close-outline' : '',\n bordered: props.bordered,\n color: '',\n padding: props.padding,\n }\"\n (onClick)=\"closeHandler()\"\n >\n <div [ngClass]=\"['content-container', props.mode, props.alignment]\" body>\n <val-title-block\n [props]=\"{\n position: props.content.position,\n aboveTitle: props.content.aboveTitle,\n title: props.content.title,\n bellowTitle: props.content.bellowTitle,\n }\"\n ></val-title-block>\n @if (props.actions) {\n <val-button-group\n [ngClass]=\"['buttons-container', props.mode, props.alignment]\"\n [props]=\"props.actions\"\n (onClick)=\"clickHandler($event)\"\n ></val-button-group>\n }\n </div>\n </val-box>\n `,\n styleUrls: ['./banner.component.scss'],\n})\n/**\n * val-banner\n *\n * Displays a banner with title block, actions, and optional close button.\n *\n * @example\n * <val-banner [props]=\"{ content: {...}, actions: {...}, closable: true, bordered: true, mode: 'center', alignment: 'center', padding: '8px' }\" (onClick)=\"handler($event)\" (onClose)=\"closeHandler()\"></val-banner>\n *\n * @input props: BannerMetadata - Configuration for the banner (content, actions, closable, bordered, mode, alignment, padding)\n * @output onClick - Emits when an action is clicked\n * @output onClose - Emits when the banner is closed\n */\nexport class BannerComponent implements OnInit, OnChanges {\n @Input()\n props: BannerMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n @Output()\n onClose = new EventEmitter();\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n // Forzar detección de cambios múltiple\n this.cdr.detectChanges();\n setTimeout(() => {\n this.cdr.detectChanges();\n }, 0);\n }\n }\n\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n\n closeHandler() {\n this.onClose.emit();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport {\n IonButton,\n IonButtons,\n IonIcon,\n IonMenuButton,\n IonText,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport { addIcons } from 'ionicons';\nimport { chevronBackOutline } from 'ionicons/icons';\nimport { IconService } from '../../../services/icons.service';\nimport { AvatarComponent } from '../../atoms/avatar/avatar.component';\nimport { ImageComponent } from '../../atoms/image/image.component';\nimport { ToolbarAction, ToolbarActionType } from '../../types';\nimport { ToolbarMetadata } from './types';\n\n/**\n * ToolbarComponent\n *\n * Componente de barra de herramientas reutilizable para encabezados y pies de página.\n * Permite acciones, botón de retroceso, menú y personalización de colores y título.\n *\n * @example\n * <val-toolbar [props]=\"{ title: 'Mi App', withBack: true, actions: [...] }\" (onClick)=\"handleToolbarAction($event)\"></val-toolbar>\n *\n * @input props {ToolbarMetadata} - Metadatos de la barra de herramientas.\n * @output onClick - Emite el token de la acción clicada.\n */\n@Component({\n selector: 'val-toolbar',\n standalone: true,\n imports: [\n CommonModule,\n IonToolbar,\n IonButtons,\n IonButton,\n IonIcon,\n IonText,\n IonTitle,\n AvatarComponent,\n ImageComponent,\n IonMenuButton,\n ],\n template: `\n <ion-toolbar [color]=\"props.color\" [class.background]=\"props.color === 'background'\">\n <ng-container *ngIf=\"props.withBack\">\n <ion-buttons class=\"left-buttons\" slot=\"start\" *ngIf=\"props.withBack\">\n <ion-button fill=\"clear\" (click)=\"goBack()\" [color]=\"props.textColor\" style=\"margin-left: 8px;\">\n <ion-icon name=\"chevron-back-outline\" [slot]=\"props.backText ? 'start' : 'icon-only'\"></ion-icon>\n <ion-text *ngIf=\"props.backText\">{{ props.backText }}</ion-text>\n </ion-button>\n </ion-buttons>\n </ng-container>\n <ng-container *ngIf=\"props.withActions\">\n <ion-buttons slot=\"end\" *ngIf=\"someInRight() || props.withMenu\">\n <ng-container *ngFor=\"let action of rightActions()\">\n <ion-button *ngIf=\"action.type === actionTypes.ICON\" (click)=\"clickHandler(action.token)\">\n <ion-icon slot=\"icon-only\" [name]=\"action.description\" [color]=\"props.textColor\"></ion-icon>\n </ion-button>\n <val-avatar\n *ngIf=\"action.type === actionTypes.AVATAR\"\n [props]=\"{ size: 'small', image: action.description, default: '' }\"\n (onClick)=\"clickHandler(action.token)\"\n ></val-avatar>\n <val-image\n *ngIf=\"action.type === actionTypes.IMAGE\"\n [props]=\"action.image\"\n (click)=\"clickHandler(action.token)\"\n ></val-image>\n <ion-button\n [color]=\"props.textColor\"\n *ngIf=\"action.type === actionTypes.BUTTON\"\n (click)=\"clickHandler(action.token)\"\n >{{ action.description }}</ion-button\n >\n </ng-container>\n @if (props.withMenu) {\n <ion-menu-button color=\"dark\"></ion-menu-button>\n }\n </ion-buttons>\n <ion-buttons slot=\"start\" *ngIf=\"someInLeft()\" style=\"padding-left: 4px;\">\n <ng-container *ngFor=\"let action of leftActions()\">\n <ion-button *ngIf=\"action.type === actionTypes.ICON\" (click)=\"clickHandler(action.token)\">\n <ion-icon slot=\"icon-only\" [name]=\"action.description\" [color]=\"props.textColor\"></ion-icon>\n </ion-button>\n <val-avatar\n *ngIf=\"action.type === actionTypes.AVATAR\"\n [props]=\"{ size: 'small', image: action.description, default: '' }\"\n (onClick)=\"clickHandler(action.token)\"\n ></val-avatar>\n <val-image\n *ngIf=\"action.type === actionTypes.IMAGE\"\n [props]=\"action.image\"\n (click)=\"clickHandler(action.token)\"\n ></val-image>\n <ion-button *ngIf=\"action.type === actionTypes.BUTTON\" (click)=\"clickHandler(action.token)\">{{\n action.description\n }}</ion-button>\n </ng-container>\n </ion-buttons>\n </ng-container>\n <ion-title *ngIf=\"props.title\" [color]=\"props.textColor\">{{ props.title }}</ion-title>\n <!-- experimental -->\n <ng-content select=\"[toolbar-bottom]\"></ng-content>\n </ion-toolbar>\n `,\n styleUrls: ['./toolbar.component.scss'],\n})\nexport class ToolbarComponent implements OnInit {\n /**\n * Metadatos de la barra de herramientas.\n */\n @Input()\n props: ToolbarMetadata;\n\n /**\n * Evento emitido al hacer click en una acción o botón de la barra.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n actionTypes = ToolbarActionType;\n\n constructor(\n private navCtrl: NavController,\n icon: IconService\n ) {\n addIcons({ chevronBackOutline });\n }\n\n ngOnInit() {}\n\n /**\n * Emite el token de la acción clicada.\n * @param token Token de la acción\n */\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n\n /**\n * Navega hacia atrás usando NavController.\n */\n goBack() {\n this.navCtrl.back();\n }\n\n /**\n * Determina si hay acciones a la derecha.\n */\n someInRight(): boolean {\n return !!this.props.actions.find(x => x.position === 'right');\n }\n\n /**\n * Determina si hay acciones a la izquierda.\n */\n someInLeft(): boolean {\n return !!this.props.actions.find(x => x.position === 'left');\n }\n\n /**\n * Devuelve las acciones de la derecha.\n */\n rightActions(): ToolbarAction[] {\n return this.props.actions.filter(x => x.position === 'right');\n }\n\n /**\n * Devuelve las acciones de la izquierda.\n */\n leftActions(): ToolbarAction[] {\n return this.props.actions.filter(x => x.position === 'left');\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IonFooter } from '@ionic/angular/standalone';\nimport { ToolbarComponent } from '../toolbar/toolbar.component';\nimport { FooterMetadata } from './types';\n\n/**\n * FooterComponent\n *\n * Componente de pie de página reutilizable para aplicaciones Ionic/Angular.\n * Permite mostrar una barra de herramientas (toolbar) y contenido adicional.\n *\n * @example\n * <val-footer [props]=\"footerProps\" (onClick)=\"handleFooterAction($event)\">\n * <div extra>Contenido extra</div>\n * </val-footer>\n *\n * @input props {FooterMetadata} - Metadatos del pie de página y su toolbar.\n * @output onClick - Emite el token de la acción clicada en la toolbar.\n */\n@Component({\n selector: 'val-footer',\n standalone: true,\n imports: [CommonModule, IonFooter, ToolbarComponent],\n template: `\n <ion-footer\n [class.ion-no-border]=\"!props.bordered\"\n [translucent]=\"props.translucent\"\n [class.background]=\"props.toolbar.color === 'background'\"\n >\n <val-toolbar\n *ngIf=\"props.toolbar.title || props.toolbar.withActions || props.toolbar.withBack\"\n [props]=\"props.toolbar\"\n (onClick)=\"clickHandler($event)\"\n ></val-toolbar>\n <ng-content select=\"[extra]\"></ng-content>\n </ion-footer>\n `,\n styleUrls: ['./footer.component.scss'],\n})\nexport class FooterComponent implements OnInit {\n /**\n * Metadatos del pie de página y su toolbar.\n */\n @Input()\n props: FooterMetadata;\n\n /**\n * Evento emitido al hacer click en una acción de la toolbar.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor() {}\n\n ngOnInit() {}\n\n /**\n * Emite el token de la acción clicada en la toolbar.\n * @param token Token de la acción\n */\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n}\n","import { ValidatorFn, Validators } from '@angular/forms';\nimport { ComponentStates, InputMetadata, InputType } from '../../types';\n\nexport const maxLength = (\n field: string,\n max: number\n): { validator: ValidatorFn; error: string } => {\n return {\n validator: Validators.maxLength(max),\n error: `El campo ${field} no debe superar los ${max} caracteres.`,\n };\n};\n\nexport const createNumberFromToField = (\n name: string,\n label: string,\n fromLabel: string,\n toLabel: string,\n options?: {\n fromPlaceholder?: string;\n toPlaceholder?: string;\n hint?: string;\n range?: { min: number; max: number };\n validators?: ValidatorFn[];\n order?: number;\n }\n): InputMetadata => {\n return {\n control: null as any, // Will be set by form component\n token: `number-from-to-${name}`,\n label,\n name,\n hint: options?.hint || '',\n placeholder: '',\n type: InputType.NUMBER_FROM_TO,\n order: options?.order || 0,\n validators: options?.validators || [],\n range: options?.range,\n errors: {},\n state: ComponentStates.ENABLED,\n fromLabel,\n toLabel,\n fromPlaceholder: options?.fromPlaceholder,\n toPlaceholder: options?.toPlaceholder,\n };\n};\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { ButtonGroupComponent } from '../../../molecules/button-group/button-group.component';\nimport { ButtonMetadata, ComponentStates, FormMetadata, FormSubmit } from '../../../types';\nimport { FooterComponent } from '../../footer/footer.component';\n\n@Component({\n selector: 'val-form-footer',\n standalone: true,\n imports: [FooterComponent, ButtonGroupComponent],\n template: `\n <val-footer\n [props]=\"{\n bordered: false,\n translucent: false,\n toolbar: {\n title: '',\n actions: [],\n color: 'background',\n withBack: false,\n withActions: false,\n },\n }\"\n >\n <val-button-group\n extra\n [props]=\"{ buttons: actions, position: 'center', columned: false }\"\n (onClick)=\"submitHandler($event)\"\n ></val-button-group>\n </val-footer>\n `,\n styleUrls: ['./form-footer.component.scss'],\n})\nexport class FormFooterComponent implements OnInit {\n @Input()\n props: { form: FormGroup; data: FormMetadata };\n\n @Output()\n onSubmit = new EventEmitter<FormSubmit>();\n\n constructor() {}\n\n ngOnInit() {}\n\n async submitHandler(token?: string) {\n this.onSubmit.emit({ fields: this.props.form.value, token });\n }\n\n get actions(): ButtonMetadata[] {\n if (!this.props.form) {\n return [];\n }\n\n if (this.props.form.valid) {\n this.props.data.actions.state = ComponentStates.ENABLED;\n }\n\n if (this.props.data.state === ComponentStates.WORKING) {\n this.props.data.actions.state = ComponentStates.WORKING;\n }\n\n if (this.props.data.state === ComponentStates.ENABLED) {\n this.props.data.actions.state = ComponentStates.ENABLED;\n }\n\n if (this.props.data.state === ComponentStates.DISABLED) {\n this.props.data.actions.state = ComponentStates.DISABLED;\n }\n\n return [this.props.data.actions];\n }\n}\n","import { ElementRef } from '@angular/core';\n\n/**\n * Scrolls smoothly to the top of the element with the given id.\n * @param id The id of the element to scroll to\n */\nexport const goToTop = (id: string): void => {\n const element = document.getElementById(id);\n if (element) {\n element.scrollIntoView({\n block: 'start',\n inline: 'nearest',\n behavior: 'smooth',\n });\n }\n};\n\n/**\n * Checks if the bottom of the given ElementRef is within the viewport.\n * Useful for determining if a form or element is fully visible.\n * @param elementRef The Angular ElementRef to check\n * @returns True if the element's bottom is at or above the window's bottom\n */\nexport const isAtEnd = (elementRef: ElementRef): boolean => {\n const formElement = elementRef.nativeElement;\n const rect = formElement.getBoundingClientRect();\n const windowHeight = window.innerHeight;\n return rect.bottom <= windowHeight;\n};\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { isAtEnd } from '../../../shared/utils/dom';\nimport { DisplayComponent } from '../../atoms/display/display.component';\nimport { DividerComponent } from '../../atoms/divider/divider.component';\nimport { TitleComponent } from '../../atoms/title/title.component';\nimport { ButtonGroupComponent } from '../../molecules/button-group/button-group.component';\nimport { CheckInputComponent } from '../../molecules/check-input/check-input.component';\nimport { CommentInputComponent } from '../../molecules/comment-input/comment-input.component';\nimport { DateInputComponent } from '../../molecules/date-input/date-input.component';\nimport { EmailInputComponent } from '../../molecules/email-input/email-input.component';\nimport { FileInputComponent } from '../../molecules/file-input/file-input.component';\nimport { HintComponent } from '../../molecules/hint/hint.component';\nimport { HourInputComponent } from '../../molecules/hour-input/hour-input.component';\nimport { NumberInputComponent } from '../../molecules/number-input/number-input.component';\nimport { NumberFromToComponent } from '../../molecules/number-from-to/number-from-to.component';\nimport { PasswordInputComponent } from '../../molecules/password-input/password-input.component';\nimport { PinInputComponent } from '../../molecules/pin-input/pin-input.component';\nimport { RadioInputComponent } from '../../molecules/radio-input/radio-input.component';\nimport { SearchSelectorComponent } from '../../molecules/select-input/select-input.component';\nimport { SelectSearchComponent } from '../../molecules/select-search/select-search.component';\nimport { MultiSelectSearchComponent } from '../../molecules/multi-select-search/multi-select-search.component';\nimport { TextInputComponent } from '../../molecules/text-input/text-input.component';\nimport { ButtonMetadata, ComponentStates, FormMetadata, FormSubmit, InputMetadata, InputType } from '../../types';\n\n@Component({\n selector: 'val-form',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n DisplayComponent,\n TitleComponent,\n TextInputComponent,\n CheckInputComponent,\n ButtonGroupComponent,\n DividerComponent,\n HintComponent,\n CommentInputComponent,\n DateInputComponent,\n FileInputComponent,\n HourInputComponent,\n EmailInputComponent,\n NumberInputComponent,\n NumberFromToComponent,\n RadioInputComponent,\n PasswordInputComponent,\n PinInputComponent,\n SelectSearchComponent,\n MultiSelectSearchComponent,\n SearchSelectorComponent,\n ],\n template: `\n <div class=\"container\">\n <form [formGroup]=\"form\">\n <val-display\n *ngIf=\"props.name\"\n [props]=\"{\n content: props.name,\n color: 'dark',\n size: 'large',\n }\"\n ></val-display>\n <div class=\"section\" *ngFor=\"let s of props.sections\">\n <val-title [props]=\"{ content: s.name, size: 'large', color: '', bold: false }\"></val-title>\n <div class=\"input\" *ngFor=\"let f of s.fields\">\n <val-title [props]=\"{ content: f.label, size: 'small', color: 'dark', bold: false }\"></val-title>\n <ng-container *ngIf=\"f.type === types.TEXT\">\n <val-text-input [props]=\"getFieldProp(f)\"></val-text-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.CHECK\">\n <val-check-input></val-check-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.COMMENT\">\n <val-comment-input [props]=\"getFieldProp(f)\"></val-comment-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.DATE\">\n <val-date-input [props]=\"getFieldProp(f)\"></val-date-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.EMAIL\">\n <val-email-input [props]=\"getFieldProp(f)\"></val-email-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.FILE\">\n <val-file-input [props]=\"getFieldProp(f)\"></val-file-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.HOUR\">\n <val-hour-input [props]=\"getFieldProp(f)\"></val-hour-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.NUMBER\">\n <val-number-input [props]=\"getFieldProp(f)\"></val-number-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.NUMBER_FROM_TO\">\n <val-number-from-to [props]=\"getFieldProp(f)\"></val-number-from-to>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.PASSWORD\">\n <val-password-input [props]=\"getFieldProp(f)\"></val-password-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.PIN_CODE\">\n <val-pin-input [props]=\"getFieldProp(f)\"></val-pin-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.RADIO\">\n <val-radio-input [props]=\"getFieldProp(f)\"></val-radio-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.SELECT\">\n <val-select-input [props]=\"getFieldProp(f)\"></val-select-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.SEARCH_SELECT\">\n <val-select-search [props]=\"getFieldProp(f)\"></val-select-search>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.MULTI_SELECT\">\n <val-multi-select-search [props]=\"getFieldProp(f)\"></val-multi-select-search>\n </ng-container>\n <val-hint [props]=\"getFieldProp(f)\"></val-hint>\n </div>\n <val-divider [props]=\"{ fill: 'solid', size: 'medium', color: 'medium' }\"></val-divider>\n <ng-content></ng-content>\n </div>\n <val-button-group\n [props]=\"{ buttons: actions, position: 'center', columned: false }\"\n (onClick)=\"submitHandler($event)\"\n ></val-button-group>\n </form>\n </div>\n `,\n styleUrls: ['./form.component.scss'],\n})\nexport class FormComponent implements OnInit {\n @Input()\n props: FormMetadata;\n\n @Output()\n onSubmit = new EventEmitter<FormSubmit>();\n\n @Output()\n onInvalid = new EventEmitter();\n\n @Output()\n onSelectChange = new EventEmitter<{ field: string; value: any }>();\n\n form: FormGroup;\n types = InputType;\n private subscriptions: Subscription[] = [];\n\n constructor(\n private fb: FormBuilder,\n private elementRef: ElementRef\n ) {}\n\n ngOnInit() {\n const formControls = {};\n this.props.sections.forEach(section => {\n section.fields.forEach(field => {\n if (field.type === this.types.NUMBER_FROM_TO) {\n // Crear dos controles para campos NUMBER_FROM_TO\n formControls[`${field.name}_from`] = [undefined, field.validators || []];\n formControls[`${field.name}_to`] = [undefined, field.validators || []];\n } else {\n formControls[field.name] = [undefined, field.validators || []];\n }\n });\n });\n this.form = this.fb.group(formControls);\n this.props.sections.forEach(section => {\n section.fields\n .filter(\n x =>\n x.type === this.types.SELECT ||\n x.type === this.types.TEXT ||\n x.type === this.types.SEARCH_SELECT ||\n x.type === this.types.MULTI_SELECT\n )\n .forEach(field => {\n this.trackSelectChanges(field.name);\n });\n });\n }\n\n ngOnDestroy() {\n // Cleanup subscriptions to avoid memory leaks\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n trackSelectChanges(fieldName: string) {\n const control = this.getControl(fieldName);\n const subscription = control.valueChanges.subscribe(value => {\n this.onSelectChange.emit({ field: fieldName, value });\n });\n this.subscriptions.push(subscription);\n }\n\n async submitHandler(token?: string) {\n this.onSubmit.emit({ fields: this.form.getRawValue(), token });\n }\n\n getControl(field: string): FormControl {\n return this.Form.get(field) as FormControl;\n }\n\n getFieldProp(field: InputMetadata): InputMetadata {\n field.token;\n if (!field.token) {\n field.token = `input-${field.type}-${field.name}`;\n }\n\n if (field.type === this.types.NUMBER_FROM_TO) {\n const fromControl = this.getControl(`${field.name}_from`);\n const toControl = this.getControl(`${field.name}_to`);\n\n if (field.state === ComponentStates.DISABLED) {\n fromControl.disable();\n toControl.disable();\n } else {\n fromControl.enable();\n toControl.enable();\n }\n\n return {\n ...field,\n fromControl,\n toControl,\n control: undefined, // Remove control for NUMBER_FROM_TO fields\n };\n } else {\n const control = this.getControl(field.name);\n if (field.state === ComponentStates.DISABLED) {\n control.disable();\n } else {\n control.enable();\n }\n return {\n ...field,\n control,\n };\n }\n }\n\n get isAtEndOfForm(): boolean {\n return isAtEnd(this.elementRef);\n }\n\n get Form(): FormGroup {\n return this.form;\n }\n\n get FormState(): { form: FormGroup; data: FormMetadata } {\n return {\n form: this.Form,\n data: this.props,\n };\n }\n\n get actions(): ButtonMetadata[] {\n if (!this.form) {\n return [];\n }\n\n if (this.form.valid) {\n this.props.actions.state = ComponentStates.ENABLED;\n }\n\n if (this.props.state === ComponentStates.WORKING) {\n this.props.actions.state = ComponentStates.WORKING;\n }\n\n if (this.props.state === ComponentStates.ENABLED) {\n this.props.actions.state = ComponentStates.ENABLED;\n }\n\n if (this.props.state === ComponentStates.DISABLED) {\n this.props.actions.state = ComponentStates.DISABLED;\n }\n\n return [this.props.actions];\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IonHeader } from '@ionic/angular/standalone';\nimport { ToolbarComponent } from '../toolbar/toolbar.component';\nimport { HeaderMetadata } from './types';\n\n@Component({\n selector: 'val-header',\n standalone: true,\n imports: [IonHeader, ToolbarComponent],\n template: `\n <ion-header [class.ion-no-border]=\"!props.bordered\" [translucent]=\"props.translucent\">\n <val-toolbar [props]=\"props.toolbar\" (onClick)=\"clickHandler($event)\"></val-toolbar>\n </ion-header>\n `,\n styleUrls: ['./header.component.scss'],\n})\n/**\n * HeaderComponent\n *\n * Componente de encabezado reutilizable para aplicaciones Ionic/Angular.\n * Permite mostrar una barra de herramientas (toolbar) configurable.\n *\n * @example\n * <val-header [props]=\"headerProps\" (onClick)=\"handleHeaderAction($event)\"></val-header>\n *\n * @input props {HeaderMetadata} - Metadatos del encabezado y su toolbar.\n * @output onClick - Emite el token de la acción clicada en la toolbar.\n */\nexport class HeaderComponent implements OnInit {\n /**\n * Metadatos del encabezado y su toolbar.\n */\n @Input()\n props: HeaderMetadata;\n\n /**\n * Evento emitido al hacer click en una acción de la toolbar.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor() {}\n\n ngOnInit() {}\n\n /**\n * Emite el token de la acción clicada en la toolbar.\n * @param token Token de la acción\n */\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n}\n","import { NgClass, NgStyle } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport {\n IonAvatar,\n IonButton,\n IonIcon,\n IonItem,\n IonLabel,\n IonList,\n IonListHeader,\n IonNote,\n IonSpinner,\n} from '@ionic/angular/standalone';\nimport { IconService } from '../../../services/icons.service';\nimport { resolveColor } from '../../../shared/utils/styles';\nimport { ComponentStates } from '../../types';\nimport { ListMetadata } from './types';\n\n@Component({\n selector: 'val-item-list',\n standalone: true,\n imports: [\n RouterLink,\n NgStyle,\n NgClass,\n IonList,\n IonListHeader,\n IonLabel,\n IonNote,\n IonItem,\n IonAvatar,\n IonIcon,\n IonButton,\n IonSpinner,\n ],\n template: `\n <ion-list\n [inset]=\"props.rounded\"\n [class.shadowed]=\"props.shadowed\"\n [class.bordered]=\"props.bordered\"\n [style.borderColor]=\"this.color()\"\n >\n @if (props.title) {\n <ion-list-header>\n <ion-label>{{ props.title }}</ion-label>\n </ion-list-header>\n }\n @for (item of props.items; track item.token) {\n @if (item.mode == 'justext') {\n <ion-item\n [lines]=\"item.lines\"\n [button]=\"item.clickable\"\n [disabled]=\"item.disabled\"\n (click)=\"clickHandler(item.token)\"\n >\n @if (item.unreadIndicator) {\n <div class=\"unread-indicator-wrapper\" slot=\"start\">\n <div class=\"unread-indicator\"></div>\n </div>\n }\n\n <ion-label [ngClass]=\"{ 'ion-text-nowrap': item.ellipsis }\">\n <h2>{{ item.text }}</h2>\n\n @if (item.comments) {\n <ion-note color=\"medium\"> {{ item.comments }} </ion-note>\n }\n\n @if (item.subtitle) {\n <p>{{ item.subtitle }}</p>\n }\n </ion-label>\n\n @if (item.endNote) {\n <ion-note slot=\"end\">{{ item.endNote }}</ion-note>\n }\n </ion-item>\n }\n\n @if (item.mode == 'actionable') {\n <ion-item [lines]=\"item.lines\" [button]=\"item.clickable\" [disabled]=\"item.disabled\">\n @if (item.unreadIndicator) {\n <div class=\"unread-indicator-wrapper\" slot=\"start\">\n <div class=\"unread-indicator\"></div>\n </div>\n }\n\n <ion-label [ngClass]=\"{ 'ion-text-nowrap': item.ellipsis }\">\n <h2>{{ item.text }}</h2>\n\n @if (item.endNote) {\n <h3>{{ item.endNote }}</h3>\n }\n\n @if (item.subtitle) {\n <ion-note color=\"medium\"> {{ item.subtitle }} </ion-note>\n }\n\n @if (item.comments) {\n <ion-note color=\"medium\"> {{ item.comments }} </ion-note>\n }\n </ion-label>\n\n @if (item.actions) {\n @for (action of item.actions; track action.token) {\n <ion-button\n fill=\"outline\"\n color=\"dark\"\n slot=\"end\"\n [disabled]=\"action.state === states.WORKING\"\n (click)=\"onActionClickHandler(action.token)\"\n >\n @if (action.state !== states.WORKING) {\n @if (action.icon) {\n <ion-icon aria-hidden=\"true\" [name]=\"action.icon\" size=\"medium\" slot=\"start\"></ion-icon>\n }\n\n {{ action.description }}\n }\n\n @if (action.state === states.WORKING) {\n <ion-spinner class=\"action-spinner\" name=\"circular\"></ion-spinner>\n }\n </ion-button>\n }\n }\n </ion-item>\n }\n\n @if (item.mode == 'route') {\n <ion-item\n [lines]=\"item.lines\"\n [button]=\"item.clickable\"\n [disabled]=\"item.disabled\"\n (click)=\"clickHandler(item.token)\"\n [routerLink]=\"item.routerLink\"\n >\n @if (item.unreadIndicator) {\n <div class=\"unread-indicator-wrapper\" slot=\"start\">\n <div class=\"unread-indicator\"></div>\n </div>\n }\n @if (item.icon) {\n <ion-icon aria-hidden=\"true\" [name]=\"item.icon\" size=\"medium\" slot=\"start\"></ion-icon>\n }\n\n <ion-label [ngClass]=\"{ 'ion-text-nowrap': item.ellipsis }\">\n <h2>{{ item.text }}</h2>\n\n @if (item.comments) {\n <ion-note color=\"medium\"> {{ item.comments }} </ion-note>\n }\n </ion-label>\n </ion-item>\n }\n\n @if (item.mode == 'subtitule') {\n <ion-item\n [lines]=\"item.lines\"\n [button]=\"item.clickable\"\n [disabled]=\"item.disabled\"\n (click)=\"clickHandler(item.token)\"\n >\n @if (item.unreadIndicator) {\n <div class=\"unread-indicator-wrapper\" slot=\"start\">\n <div class=\"unread-indicator\"></div>\n </div>\n }\n\n <ion-label [ngClass]=\"{ 'ion-text-nowrap': item.ellipsis }\">\n <h1>{{ item.text }}</h1>\n <p>{{ item.subtitle }}</p>\n </ion-label>\n </ion-item>\n }\n\n @if (item.mode == 'avatar') {\n <ion-item\n [lines]=\"item.lines\"\n [button]=\"item.clickable\"\n [disabled]=\"item.disabled\"\n (click)=\"clickHandler(item.token)\"\n >\n <ion-avatar aria-hidden=\"true\" slot=\"start\">\n <img alt=\"\" [src]=\"item.image\" />\n </ion-avatar>\n <ion-label>{{ item.text }}</ion-label>\n </ion-item>\n }\n\n @if (item.mode == 'icon') {\n <ion-item\n [lines]=\"item.lines\"\n [button]=\"item.clickable\"\n [disabled]=\"item.disabled\"\n (click)=\"clickHandler(item.token)\"\n >\n <ion-icon aria-hidden=\"true\" [name]=\"item.icon\" size=\"medium\" slot=\"start\"></ion-icon>\n <ion-label>{{ item.text }}</ion-label>\n </ion-item>\n }\n }\n </ion-list>\n `,\n styleUrls: ['./item-list.component.scss'],\n})\n/**\n * ItemListComponent\n *\n * Componente de lista reutilizable para mostrar una colección de elementos con diferentes modos de visualización (texto, subtítulo, avatar, icono, ruta, acciones).\n * Permite acciones por elemento, indicadores de no leído, y personalización de estilos.\n *\n * @example\n * <val-item-list [props]=\"{ title: 'Usuarios', items: [{ text: 'Juan', mode: 'avatar', image: 'avatar.jpg' }] }\" (onClick)=\"handleClick($event)\"></val-item-list>\n *\n * @input props {ListMetadata} - Metadatos de la lista y sus elementos.\n * @output onClick - Emite el token del elemento clicado.\n * @output onActionClick - Emite el token de la acción clicada en un elemento.\n */\nexport class ItemListComponent implements OnInit {\n states = ComponentStates;\n defaultColor = 'primary';\n\n /**\n * Metadatos de la lista y sus elementos.\n */\n @Input()\n props: ListMetadata;\n\n /**\n * Evento emitido al hacer click en un elemento de la lista.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n /**\n * Evento emitido al hacer click en una acción de un elemento.\n */\n @Output()\n onActionClick = new EventEmitter<string>();\n\n constructor(icon: IconService) {}\n\n ngOnInit() {}\n\n /**\n * Emite el token del elemento clicado.\n * @param token Token del elemento\n */\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n\n /**\n * Emite el token de la acción clicada.\n * @param token Token de la acción\n */\n onActionClickHandler(token?: string) {\n this.onActionClick.emit(token);\n }\n\n /**\n * Devuelve el color de borde de la lista.\n */\n color() {\n return resolveColor(this.props.color || this.defaultColor);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { ImageComponent } from '../../atoms/image/image.component';\nimport { BannerComponent } from '../banner/banner.component';\nimport { NoContentMetadata } from './types';\n\n@Component({\n selector: 'val-no-content',\n standalone: true,\n imports: [ImageComponent, BannerComponent],\n template: `\n @if (props.topContent) {\n <div>\n <val-banner [props]=\"props.topContent\" (onClick)=\"onClickHandler($event)\"></val-banner>\n </div>\n }\n <val-image class=\"image-container\" [props]=\"props.image\"></val-image>\n <div>\n <val-banner [props]=\"props.bottomContent\" (onClick)=\"onClickHandler($event)\"></val-banner>\n </div>\n `,\n styleUrls: ['./no-content.component.scss'],\n})\n/**\n * NoContentComponent\n *\n * Componente para mostrar una pantalla de \"sin contenido\" con imagen y banners opcionales arriba y abajo.\n * Útil para estados vacíos, errores o mensajes informativos.\n *\n * @example\n * <val-no-content [props]=\"{ image: { src: 'empty.svg' }, bottomContent: { ... } }\"></val-no-content>\n *\n * @input props {NoContentMetadata} - Metadatos de la imagen y banners a mostrar.\n * @output onClick - Emite el token de acción de los banners si corresponde.\n */\nexport class NoContentComponent implements OnInit, OnChanges {\n @Input()\n props: NoContentMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n // Forzar detección de cambios múltiple para asegurar actualización\n this.cdr.detectChanges();\n setTimeout(() => {\n this.cdr.detectChanges();\n }, 0);\n }\n }\n\n onClickHandler(token: string) {\n this.onClick.emit(token);\n }\n}\n","/**\n * Tipos y metadatos para el componente WizardComponent.\n * Permiten definir los pasos, botones, estado y navegación del wizard.\n */\nimport { ButtonMetadata, ComponentState } from '../../types';\nimport { NoContentMetadata } from '../no-content/types';\n\n/**\n * Metadatos del wizard.\n * @property state Estado global del wizard.\n * @property current Paso actual.\n * @property steps Colección de pasos.\n * @property error Paso de error.\n */\nexport type WizardMetadata = {\n state: ComponentState;\n current: number;\n steps: Steps;\n error: Step;\n};\n\n/**\n * Representa un paso del wizard.\n * @property titles Metadatos de \"no contenido\" para el paso.\n * @property buttons Botones disponibles en el paso.\n */\nexport type Step = {\n titles: NoContentMetadata;\n buttons: ButtonMetadata[];\n};\n\n/**\n * Colección de pasos del wizard, indexados por número de paso.\n */\nexport type Steps = {\n [step: number]: Step;\n};\n\n/**\n * Enumera los posibles movimientos de navegación en el wizard.\n */\nexport enum MOTION {\n BACKWARD,\n FORWARD,\n RETRY,\n}\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { ProgressBarComponent } from '../../../atoms/progress-bar/progress-bar.component';\nimport { ButtonGroupComponent } from '../../../molecules/button-group/button-group.component';\nimport { ButtonMetadata, ComponentStates } from '../../../types';\nimport { FooterComponent } from '../../footer/footer.component';\nimport { MOTION, Step, WizardMetadata } from '../types';\n\n@Component({\n selector: 'val-wizard-footer',\n standalone: true,\n imports: [FooterComponent, ProgressBarComponent, ButtonGroupComponent],\n template: `\n <val-footer\n [props]=\"{\n bordered: false,\n translucent: false,\n toolbar: {\n title: '',\n actions: [],\n color: '',\n withBack: false,\n withActions: false,\n },\n }\"\n >\n <val-progress-bar\n extra\n [props]=\"{ progress: Progress, color: '', type: 'determinate', buffer: 1, size: 'small', rounded: false }\"\n ></val-progress-bar>\n <val-button-group\n extra\n [props]=\"{ buttons: actions, position: 'spaced', columned: false }\"\n (onClick)=\"clickHandler($event)\"\n ></val-button-group>\n </val-footer>\n `,\n styleUrls: ['./wizard-footer.component.scss'],\n})\nexport class WizardFooterComponent implements OnInit, OnChanges {\n @Input()\n props: WizardMetadata;\n\n @Output()\n onClick = new EventEmitter<{ current: number; motion: MOTION }>();\n\n wrapperId = 'wizard-wrapper';\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n this.cdr.detectChanges();\n }\n }\n\n clickHandler(token?: string) {\n if (!token) {\n return;\n }\n if (token.includes('right')) {\n this.tryToStep(MOTION.FORWARD);\n }\n if (token.includes('left')) {\n this.tryToStep(MOTION.BACKWARD);\n }\n }\n\n get Current(): Step {\n return this.props.steps[this.props.current];\n }\n\n get Progress(): number {\n if (this.props.steps && this.props.current) {\n return this.props.current / Object.keys(this.props.steps).length;\n }\n return 0;\n }\n\n get actions(): ButtonMetadata[] {\n if (this.props.state === ComponentStates.ERROR && this.Current.buttons.length > 1) {\n this.Current.buttons[1].state = ComponentStates.DISABLED;\n }\n\n if (this.props.current === 1 && this.Current.buttons.length > 1) {\n return [this.Current.buttons[1]];\n }\n return this.Current.buttons;\n }\n\n tryToStep(motion: MOTION): void {\n this.onClick.emit({ current: this.props.current, motion });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { goToTop } from '../../../shared/utils/dom';\nimport { ContentLoaderComponent } from '../../molecules/content-loader/content-loader.component';\nimport { ComponentStates } from '../../types';\nimport { NoContentComponent } from '../no-content/no-content.component';\nimport { MOTION, Step, WizardMetadata } from './types';\n\n@Component({\n selector: 'val-wizard',\n standalone: true,\n imports: [CommonModule, NoContentComponent, ContentLoaderComponent],\n template: `\n <div [id]=\"wrapperId\" class=\"wrapper\">\n <ng-container *ngIf=\"props.state !== 'ERROR'\">\n <val-no-content [props]=\"currentStepTitles\" [attr.data-step]=\"props.current\"></val-no-content>\n <div class=\"step\">\n <div *ngIf=\"props.state === 'WORKING'\">\n <val-content-loader\n [props]=\"{\n name: 'circular',\n color: 'primary',\n size: 'large',\n text: loadingText,\n }\"\n />\n </div>\n <ng-content select=\"[step]\"></ng-content>\n </div>\n </ng-container>\n <ng-container *ngIf=\"props.state === 'ERROR'\">\n <val-no-content [props]=\"props.error.titles\" (onClick)=\"clickHandler($event)\"></val-no-content>\n </ng-container>\n </div>\n `,\n styleUrls: ['./wizard.component.scss'],\n})\nexport class WizardComponent implements OnInit, OnChanges {\n @Input()\n props: WizardMetadata;\n\n @Output()\n onClick = new EventEmitter<{ current: number; motion: MOTION }>();\n\n wrapperId = 'wizard-wrapper';\n currentStep: Step | null = null;\n currentStepTitles: any = null;\n loadingText: string;\n\n private cdr = inject(ChangeDetectorRef);\n private langService = inject(LangService);\n\n constructor() {\n this.loadingText = this.langService.getText('_global', 'pleaseWait', 'Por favor espere...');\n }\n\n ngOnInit() {\n this.updateCurrentStep();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n this.updateCurrentStep();\n this.cdr.detectChanges();\n }\n }\n\n private updateCurrentStep(): void {\n if (this.props?.steps && this.props?.current) {\n this.currentStep = this.props.steps[this.props.current];\n // Forzar nueva referencia de objeto para asegurar detección de cambios\n // Agregar timestamp para garantizar que es un objeto completamente nuevo\n this.currentStepTitles = this.currentStep?.titles\n ? {\n ...JSON.parse(JSON.stringify(this.currentStep.titles)),\n _timestamp: Date.now(), // Forzar nueva referencia\n _step: this.props.current, // Agregar identificador del paso\n }\n : null;\n\n // Forzar detección de cambios inmediatamente\n this.cdr.detectChanges();\n }\n }\n\n working() {\n this.props.state = ComponentStates.WORKING;\n if (this.Current?.buttons) {\n this.Current.buttons.forEach(button => {\n button.state = ComponentStates.DISABLED;\n });\n }\n this.cdr.markForCheck();\n }\n\n done() {\n if (this.props.state === ComponentStates.ENABLED) {\n return;\n }\n\n this.props.state = ComponentStates.ENABLED;\n if (this.Current?.buttons) {\n this.Current.buttons.forEach(button => {\n button.state = ComponentStates.ENABLED;\n });\n }\n this.cdr.markForCheck();\n }\n\n get Current(): Step {\n if (this.props?.steps && this.props?.current) {\n return this.props.steps[this.props.current];\n }\n return this.currentStep || { titles: null, buttons: [] };\n }\n\n setCurrent(newStep: number) {\n if (newStep === this.props.current) {\n return;\n }\n\n this.props.current = newStep;\n this.updateCurrentStep();\n\n // Forzar múltiples ciclos de detección de cambios\n this.cdr.detectChanges();\n setTimeout(() => {\n this.cdr.detectChanges();\n }, 0);\n\n goToTop(this.wrapperId);\n }\n\n setError(error: string) {\n if (this.props.state === ComponentStates.ERROR) {\n return;\n }\n\n this.props.error.titles.bottomContent.content.bellowTitle.content = error;\n this.props.state = ComponentStates.ERROR;\n this.cdr.markForCheck();\n goToTop(this.wrapperId);\n }\n\n reset() {\n this.props.error.titles.bottomContent.content.bellowTitle.content = '';\n this.done();\n }\n\n clickHandler(token?: string) {\n if (!token) {\n return;\n }\n if (token.includes('retry')) {\n this.reset();\n }\n\n this.onClick.emit({ current: this.props.current, motion: MOTION.RETRY });\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport {\n IonIcon,\n IonButton,\n IonBadge,\n IonTextarea,\n IonItem,\n IonSelect,\n IonSelectOption,\n IonSpinner,\n IonInfiniteScroll,\n IonInfiniteScrollContent,\n} from '@ionic/angular/standalone';\nimport { Subscription } from 'rxjs';\nimport { addIcons } from 'ionicons';\nimport {\n chatbubblesOutline,\n filterOutline,\n sendOutline,\n chatbubbleEllipsesOutline,\n swapVerticalOutline,\n} from 'ionicons/icons';\n\nimport { CommentComponent } from '../../molecules/comment/comment.component';\nimport { AvatarComponent } from '../../atoms/avatar/avatar.component';\nimport { SkeletonComponent } from '../../atoms/skeleton/skeleton.component';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport {\n CommentSectionMetadata,\n CommentSortOption,\n CommentSortChangeEvent,\n CommentSubmitEvent,\n CommentSectionLoadMoreEvent,\n} from './types';\nimport {\n CommentAuthorClickEvent,\n CommentReactionClickEvent,\n CommentActionClickEvent,\n CommentMenuItemClickEvent,\n CommentLoadMoreEvent,\n} from '../../molecules/comment/types';\n\naddIcons({\n chatbubblesOutline,\n filterOutline,\n sendOutline,\n chatbubbleEllipsesOutline,\n swapVerticalOutline,\n});\n\n@Component({\n selector: 'val-comment-section',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n IonIcon,\n IonButton,\n IonBadge,\n IonTextarea,\n IonItem,\n IonSelect,\n IonSelectOption,\n IonSpinner,\n IonInfiniteScroll,\n IonInfiniteScrollContent,\n CommentComponent,\n AvatarComponent,\n SkeletonComponent,\n ],\n template: `\n <div class=\"comment-section\" [class.loading]=\"props.loading\">\n <!-- Header -->\n <div class=\"section-header\">\n <div class=\"header-title\">\n <ion-icon name=\"chatbubbles-outline\" class=\"title-icon\"></ion-icon>\n <h3 class=\"title\">{{ displayTitle }}</h3>\n @if (props.showCount !== false && props.count !== undefined) {\n <ion-badge color=\"medium\" class=\"count-badge\">\n {{ formatCount(props.count) }}\n </ion-badge>\n }\n </div>\n\n @if (props.sortOptions && props.sortOptions.length > 0) {\n <div class=\"header-actions\">\n <ion-item lines=\"none\" class=\"sort-select-item\">\n <ion-icon name=\"swap-vertical-outline\" slot=\"start\" class=\"sort-icon\"></ion-icon>\n <ion-select\n [value]=\"props.selectedSort\"\n [placeholder]=\"props.sortLabel || 'Sort by'\"\n interface=\"popover\"\n (ionChange)=\"onSortChange($event)\"\n >\n @for (option of props.sortOptions; track option.token) {\n <ion-select-option [value]=\"option.token\">\n {{ getSortOptionLabel(option) }}\n </ion-select-option>\n }\n </ion-select>\n </ion-item>\n </div>\n }\n </div>\n\n <!-- New Comment Input -->\n @if (props.showInput !== false) {\n <div class=\"new-comment-section\">\n <div class=\"input-wrapper\">\n @if (props.inputConfig?.currentUser?.avatar) {\n <div class=\"input-avatar\">\n <val-avatar [props]=\"props.inputConfig.currentUser.avatar\"></val-avatar>\n </div>\n }\n\n <div class=\"input-container\">\n <ion-textarea\n [(ngModel)]=\"newCommentText\"\n [placeholder]=\"getInputPlaceholder()\"\n [maxlength]=\"props.inputConfig?.maxLength || 2000\"\n [disabled]=\"props.inputConfig?.disabled || props.loading\"\n [autoGrow]=\"true\"\n rows=\"2\"\n class=\"comment-textarea\"\n ></ion-textarea>\n\n <div class=\"input-actions\">\n @if (props.inputConfig?.showCounter && props.inputConfig?.maxLength) {\n <span class=\"char-counter\" [class.warning]=\"isNearLimit()\">\n {{ newCommentText.length }} / {{ props.inputConfig.maxLength }}\n </span>\n }\n\n <ion-button\n [color]=\"props.inputConfig?.submitColor || props.color || 'primary'\"\n [disabled]=\"!canSubmit()\"\n size=\"small\"\n (click)=\"onSubmitComment()\"\n >\n <ion-icon name=\"send-outline\" slot=\"start\"></ion-icon>\n {{ getSubmitLabel() }}\n </ion-button>\n </div>\n </div>\n </div>\n </div>\n }\n\n @if (props.loading) {\n <div class=\"loading-state\">\n @for (i of getSkeletonArray(); track i) {\n <div class=\"skeleton-comment\">\n <val-skeleton [props]=\"{ type: 'avatar', width: '36px', height: '36px' }\"></val-skeleton>\n <div class=\"skeleton-content\">\n <val-skeleton [props]=\"{ type: 'text', width: '120px', height: '14px' }\"></val-skeleton>\n <val-skeleton [props]=\"{ type: 'paragraph', lines: 2 }\"></val-skeleton>\n </div>\n </div>\n }\n </div>\n } @else if (props.comments && props.comments.length > 0) {\n <div class=\"comments-list\" [class.with-dividers]=\"props.showDividers\">\n @for (comment of props.comments; track comment.token) {\n <val-comment\n [props]=\"comment\"\n (authorClick)=\"authorClick.emit($event)\"\n (reactionClick)=\"reactionClick.emit($event)\"\n (actionClick)=\"onCommentAction($event)\"\n (menuItemClick)=\"menuItemClick.emit($event)\"\n (loadMoreClick)=\"commentLoadMore.emit($event)\"\n (collapseToggle)=\"collapseToggle.emit($event)\"\n ></val-comment>\n\n @if (props.showDividers && !$last) {\n <div class=\"comment-divider\"></div>\n }\n }\n\n @if (props.hasMore && props.paginationMode !== 'infinite') {\n <div class=\"load-more-section\">\n @if (props.loadingMore) {\n <ion-spinner name=\"crescent\" [color]=\"props.color || 'primary'\"></ion-spinner>\n } @else {\n <ion-button\n fill=\"outline\"\n [color]=\"props.color || 'primary'\"\n expand=\"block\"\n (click)=\"onLoadMore()\"\n >\n {{ displayLoadMoreLabel }}\n </ion-button>\n }\n </div>\n }\n </div>\n\n @if (props.paginationMode === 'infinite') {\n <ion-infinite-scroll\n [threshold]=\"props.infiniteScrollThreshold || '100px'\"\n [position]=\"props.infiniteScrollPosition || 'bottom'\"\n [disabled]=\"!props.hasMore\"\n (ionInfinite)=\"onInfiniteScroll($event)\"\n >\n <ion-infinite-scroll-content\n [loadingSpinner]=\"'crescent'\"\n [loadingText]=\"displayLoadMoreLabel\"\n ></ion-infinite-scroll-content>\n </ion-infinite-scroll>\n }\n } @else {\n <div class=\"empty-state\">\n <ion-icon\n [name]=\"props.emptyState?.icon || 'chatbubble-ellipses-outline'\"\n class=\"empty-icon\"\n ></ion-icon>\n <h4 class=\"empty-title\">{{ getEmptyTitle() }}</h4>\n <p class=\"empty-message\">{{ getEmptyMessage() }}</p>\n </div>\n }\n </div>\n `,\n styleUrls: ['./comment-section.component.scss'],\n})\n/**\n * val-comment-section\n *\n * An organism component that provides a complete comment section with:\n * - Header with title and count\n * - Sort/filter options\n * - New comment input\n * - Comments list with val-comment\n * - Load more pagination\n * - Empty state\n *\n * @example Basic usage\n * <val-comment-section [props]=\"{\n * title: 'Comments',\n * count: 42,\n * comments: commentsArray,\n * showInput: true\n * }\"></val-comment-section>\n *\n * @example With sorting\n * <val-comment-section [props]=\"{\n * title: 'Reviews',\n * count: 128,\n * comments: reviews,\n * sortOptions: [\n * { token: 'newest', label: 'Newest first' },\n * { token: 'oldest', label: 'Oldest first' },\n * { token: 'popular', label: 'Most popular' }\n * ],\n * selectedSort: 'newest'\n * }\" (sortChange)=\"onSort($event)\"></val-comment-section>\n *\n * @input props: CommentSectionMetadata - Configuration for the section\n * @output sortChange - Sort option changed\n * @output commentSubmit - New comment submitted\n * @output loadMore - Load more clicked\n * @output authorClick - Comment author clicked (bubbled from val-comment)\n * @output reactionClick - Reaction clicked (bubbled)\n * @output actionClick - Action clicked (bubbled)\n * @output menuItemClick - Menu item clicked (bubbled)\n * @output commentLoadMore - Load more replies clicked (bubbled)\n * @output collapseToggle - Comment collapse toggled (bubbled)\n */\nexport class CommentSectionComponent implements OnInit, OnDestroy {\n @Input() props: CommentSectionMetadata;\n\n // Section events\n @Output() sortChange = new EventEmitter<CommentSortChangeEvent>();\n @Output() commentSubmit = new EventEmitter<CommentSubmitEvent>();\n @Output() loadMore = new EventEmitter<CommentSectionLoadMoreEvent>();\n\n // Bubbled events from val-comment\n @Output() authorClick = new EventEmitter<CommentAuthorClickEvent>();\n @Output() reactionClick = new EventEmitter<CommentReactionClickEvent>();\n @Output() actionClick = new EventEmitter<CommentActionClickEvent>();\n @Output() menuItemClick = new EventEmitter<CommentMenuItemClickEvent>();\n @Output() commentLoadMore = new EventEmitter<CommentLoadMoreEvent>();\n @Output() collapseToggle = new EventEmitter<{ token: string; collapsed: boolean }>();\n\n // Reply state\n @Output() replyStart = new EventEmitter<{ commentToken: string }>();\n\n newCommentText = '';\n replyingTo: string | null = null;\n\n displayTitle = '';\n displayLoadMoreLabel = '';\n\n private langSubscription: Subscription | null = null;\n private langService = inject(LangService);\n\n ngOnInit(): void {\n this.updateDisplayTexts();\n\n if (this.hasReactiveContent()) {\n this.langSubscription = this.langService.currentLang$.subscribe(() => {\n this.updateDisplayTexts();\n });\n }\n }\n\n ngOnDestroy(): void {\n this.langSubscription?.unsubscribe();\n }\n\n private hasReactiveContent(): boolean {\n return !!(\n (this.props.titleContentKey && this.props.contentClass) ||\n (this.props.loadMoreContentKey && this.props.contentClass)\n );\n }\n\n private updateDisplayTexts(): void {\n // Title\n if (this.props.titleContentKey && this.props.contentClass) {\n this.displayTitle = this.langService.getText(\n this.props.contentClass,\n this.props.titleContentKey,\n this.props.titleContentFallback || this.props.title || 'Comments'\n );\n } else {\n this.displayTitle = this.props.title || 'Comments';\n }\n\n // Load more label\n if (this.props.loadMoreContentKey && this.props.contentClass) {\n this.displayLoadMoreLabel = this.langService.getText(\n this.props.contentClass,\n this.props.loadMoreContentKey,\n this.props.loadMoreLabel || 'Load more comments'\n );\n } else {\n this.displayLoadMoreLabel = this.props.loadMoreLabel || 'Load more comments';\n }\n }\n\n formatCount(count: number): string {\n if (count >= 1000000) {\n return (count / 1000000).toFixed(1).replace(/\\.0$/, '') + 'M';\n }\n if (count >= 1000) {\n return (count / 1000).toFixed(1).replace(/\\.0$/, '') + 'K';\n }\n return count.toString();\n }\n\n getSortOptionLabel(option: CommentSortOption): string {\n if (option.contentKey && option.contentClass) {\n return this.langService.getText(\n option.contentClass,\n option.contentKey,\n option.contentFallback || option.label\n );\n }\n return option.label;\n }\n\n getInputPlaceholder(): string {\n const config = this.props.inputConfig;\n if (config?.placeholderContentKey && config?.contentClass) {\n return this.langService.getText(\n config.contentClass,\n config.placeholderContentKey,\n config.placeholder || 'Write a comment...'\n );\n }\n return config?.placeholder || 'Write a comment...';\n }\n\n getSubmitLabel(): string {\n const config = this.props.inputConfig;\n if (config?.submitLabelContentKey && config?.contentClass) {\n return this.langService.getText(\n config.contentClass,\n config.submitLabelContentKey,\n config.submitLabel || 'Post'\n );\n }\n return config?.submitLabel || 'Post';\n }\n\n getEmptyTitle(): string {\n const empty = this.props.emptyState;\n if (empty?.titleContentKey && empty?.contentClass) {\n return this.langService.getText(\n empty.contentClass,\n empty.titleContentKey,\n empty.title || 'No comments yet'\n );\n }\n return empty?.title || 'No comments yet';\n }\n\n getEmptyMessage(): string {\n const empty = this.props.emptyState;\n if (empty?.messageContentKey && empty?.contentClass) {\n return this.langService.getText(\n empty.contentClass,\n empty.messageContentKey,\n empty.message || 'Be the first to share your thoughts!'\n );\n }\n return empty?.message || 'Be the first to share your thoughts!';\n }\n\n getSkeletonArray(): number[] {\n const count = this.props.skeletonCount || 3;\n return Array(count).fill(0).map((_, i) => i);\n }\n\n canSubmit(): boolean {\n const minLength = this.props.inputConfig?.minLength || 1;\n return (\n this.newCommentText.trim().length >= minLength &&\n !this.props.loading &&\n !this.props.inputConfig?.disabled\n );\n }\n\n isNearLimit(): boolean {\n const maxLength = this.props.inputConfig?.maxLength || 2000;\n return this.newCommentText.length > maxLength * 0.9;\n }\n\n onSortChange(event: CustomEvent): void {\n const selectedToken = event.detail.value;\n const option = this.props.sortOptions?.find((o) => o.token === selectedToken);\n\n if (option) {\n this.sortChange.emit({\n option,\n previousSort: this.props.selectedSort,\n });\n }\n }\n\n onSubmitComment(): void {\n if (!this.canSubmit()) return;\n\n this.commentSubmit.emit({\n content: this.newCommentText.trim(),\n parentToken: this.replyingTo || undefined,\n sectionToken: this.props.token,\n });\n\n this.newCommentText = '';\n this.replyingTo = null;\n }\n\n onCommentAction(event: CommentActionClickEvent): void {\n // Check if it's a reply action\n if (event.action.token === 'reply') {\n this.replyingTo = event.commentToken;\n this.replyStart.emit({ commentToken: event.commentToken });\n }\n\n this.actionClick.emit(event);\n }\n\n onLoadMore(): void {\n this.loadMore.emit({\n sectionToken: this.props.token,\n currentCount: this.props.comments?.length || 0,\n });\n }\n\n onInfiniteScroll(event: CustomEvent): void {\n this.loadMore.emit({\n sectionToken: this.props.token,\n currentCount: this.props.comments?.length || 0,\n });\n\n // The parent component should call completeInfiniteScroll() when done loading\n // Store reference to complete the infinite scroll\n this.infiniteScrollEvent = event;\n }\n\n // Call this method from parent after loading more comments\n completeInfiniteScroll(): void {\n if (this.infiniteScrollEvent) {\n (this.infiniteScrollEvent.target as HTMLIonInfiniteScrollElement).complete();\n this.infiniteScrollEvent = null;\n }\n }\n\n private infiniteScrollEvent: CustomEvent | null = null;\n\n // Method to programmatically start a reply\n startReply(commentToken: string): void {\n this.replyingTo = commentToken;\n }\n\n // Method to cancel reply\n cancelReply(): void {\n this.replyingTo = null;\n }\n}\n","import { Color } from '@ionic/core';\nimport { TemplateRef } from '@angular/core';\n\n/**\n * Column definition for the data table.\n */\nexport interface DataTableColumn<T = any> {\n /** Unique identifier for the column */\n key: string;\n /** Header label */\n label: string;\n /** Property path in the data object (supports dot notation) */\n field?: string;\n /** Column width (CSS value) */\n width?: string;\n /** Minimum width */\n minWidth?: string;\n /** Maximum width */\n maxWidth?: string;\n /** Text alignment */\n align?: 'left' | 'center' | 'right';\n /** Whether the column is sortable */\n sortable?: boolean;\n /** Custom sort function */\n sortFn?: (a: T, b: T) => number;\n /** Whether the column is visible */\n visible?: boolean;\n /** Custom cell template */\n cellTemplate?: TemplateRef<any>;\n /** Custom header template */\n headerTemplate?: TemplateRef<any>;\n /** Format function for cell value */\n format?: (value: any, row: T) => string;\n /** CSS class for the column */\n cssClass?: string;\n /** Whether this is a sticky column */\n sticky?: 'start' | 'end';\n}\n\n/**\n * Sort configuration.\n */\nexport interface DataTableSort {\n /** Column key to sort by */\n column: string;\n /** Sort direction */\n direction: 'asc' | 'desc';\n}\n\n/**\n * Pagination configuration.\n */\nexport interface DataTablePagination {\n /** Current page (0-indexed) */\n page: number;\n /** Items per page */\n pageSize: number;\n /** Total number of items */\n total: number;\n /** Available page size options */\n pageSizeOptions?: number[];\n}\n\n/**\n * Selection configuration.\n */\nexport interface DataTableSelection<T = any> {\n /** Selection mode */\n mode: 'none' | 'single' | 'multiple';\n /** Currently selected items */\n selected: T[];\n /** Function to get unique ID from row */\n trackBy?: (row: T) => any;\n}\n\n/**\n * Row click event.\n */\nexport interface DataTableRowClickEvent<T = any> {\n /** The row data */\n row: T;\n /** Row index */\n index: number;\n /** Original mouse event */\n event: MouseEvent;\n}\n\n/**\n * Selection change event.\n */\nexport interface DataTableSelectionChangeEvent<T = any> {\n /** Selected rows */\n selected: T[];\n /** Row that was changed (if single change) */\n changedRow?: T;\n /** Action performed */\n action: 'select' | 'deselect' | 'selectAll' | 'deselectAll';\n}\n\n/**\n * Sort change event.\n */\nexport interface DataTableSortChangeEvent {\n /** Column key */\n column: string;\n /** Sort direction */\n direction: 'asc' | 'desc' | null;\n}\n\n/**\n * Page change event.\n */\nexport interface DataTablePageChangeEvent {\n /** New page number */\n page: number;\n /** Page size */\n pageSize: number;\n /** Previous page */\n previousPage: number;\n}\n\n/**\n * Empty state configuration.\n */\nexport interface DataTableEmptyState {\n /** Icon to display */\n icon?: string;\n /** Title text */\n title?: string;\n /** Description text */\n description?: string;\n /** Custom template */\n template?: TemplateRef<any>;\n}\n\n/**\n * Loading state configuration.\n */\nexport interface DataTableLoadingState {\n /** Whether data is loading */\n loading: boolean;\n /** Number of skeleton rows to show */\n skeletonRows?: number;\n /** Loading message */\n message?: string;\n}\n\n/**\n * Metadata for the data table component.\n */\nexport interface DataTableMetadata<T = any> {\n /** Column definitions */\n columns: DataTableColumn<T>[];\n /** Data rows */\n data: T[];\n\n // === Sorting ===\n /** Current sort configuration */\n sort?: DataTableSort;\n /** Enable client-side sorting */\n clientSort?: boolean;\n\n // === Pagination ===\n /** Pagination configuration */\n pagination?: DataTablePagination;\n /** Enable client-side pagination */\n clientPagination?: boolean;\n /** Show pagination controls */\n showPagination?: boolean;\n\n // === Selection ===\n /** Selection configuration */\n selection?: DataTableSelection<T>;\n /** Show selection column */\n showSelectionColumn?: boolean;\n\n // === Display options ===\n /** Table size variant */\n size?: 'small' | 'medium' | 'large';\n /** Show borders */\n bordered?: boolean;\n /** Striped rows */\n striped?: boolean;\n /** Hoverable rows */\n hoverable?: boolean;\n /** Fixed header */\n stickyHeader?: boolean;\n /** Table max height (enables scrolling) */\n maxHeight?: string;\n /** Show row numbers */\n showRowNumbers?: boolean;\n /** Row number start */\n rowNumberStart?: number;\n\n // === Empty & Loading states ===\n /** Empty state configuration */\n emptyState?: DataTableEmptyState;\n /** Loading state */\n loadingState?: DataTableLoadingState;\n\n // === Styling ===\n /** Custom CSS class */\n cssClass?: string;\n /** Header color */\n headerColor?: Color;\n /** Row click enabled */\n rowClickable?: boolean;\n\n // === Actions ===\n /** Row actions template */\n actionsTemplate?: TemplateRef<any>;\n /** Actions column width */\n actionsWidth?: string;\n /** Actions column label */\n actionsLabel?: string;\n\n // === Accessibility ===\n /** Table caption for screen readers */\n caption?: string;\n /** ARIA label */\n ariaLabel?: string;\n\n // === Reactive content ===\n /** Content class for reactive content */\n contentClass?: string;\n}\n\n/**\n * Default pagination options.\n */\nexport const DEFAULT_PAGE_SIZE_OPTIONS = [10, 25, 50, 100];\n\n/**\n * Default empty state.\n */\nexport const DEFAULT_EMPTY_STATE: DataTableEmptyState = {\n icon: 'document-outline',\n title: 'No hay datos',\n description: 'No se encontraron registros para mostrar.',\n};\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnChanges,\n SimpleChanges,\n inject,\n TemplateRef,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n IonButton,\n IonIcon,\n IonCheckbox,\n IonSpinner,\n IonSelect,\n IonSelectOption,\n} from '@ionic/angular/standalone';\nimport { addIcons } from 'ionicons';\nimport {\n chevronUpOutline,\n chevronDownOutline,\n chevronBackOutline,\n chevronForwardOutline,\n documentOutline,\n} from 'ionicons/icons';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport {\n DataTableMetadata,\n DataTableColumn,\n DataTableSort,\n DataTableRowClickEvent,\n DataTableSelectionChangeEvent,\n DataTableSortChangeEvent,\n DataTablePageChangeEvent,\n DEFAULT_PAGE_SIZE_OPTIONS,\n DEFAULT_EMPTY_STATE,\n} from './types';\n\naddIcons({\n chevronUpOutline,\n chevronDownOutline,\n chevronBackOutline,\n chevronForwardOutline,\n documentOutline,\n});\n\n@Component({\n selector: 'val-data-table',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n IonButton,\n IonIcon,\n IonCheckbox,\n IonSpinner,\n IonSelect,\n IonSelectOption,\n ],\n template: `\n <div\n class=\"data-table-container\"\n [class]=\"props.cssClass\"\n [class.size-small]=\"props.size === 'small'\"\n [class.size-medium]=\"props.size === 'medium' || !props.size\"\n [class.size-large]=\"props.size === 'large'\"\n [class.bordered]=\"props.bordered\"\n [class.striped]=\"props.striped\"\n [class.hoverable]=\"props.hoverable !== false\"\n [class.sticky-header]=\"props.stickyHeader\"\n [style.--max-height]=\"props.maxHeight\"\n >\n <!-- Loading overlay -->\n @if (props.loadingState?.loading) {\n <div class=\"loading-overlay\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n @if (props.loadingState?.message) {\n <span class=\"loading-message\">{{ props.loadingState.message }}</span>\n }\n </div>\n }\n\n <div class=\"table-wrapper\" [class.is-loading]=\"props.loadingState?.loading\">\n <table\n role=\"grid\"\n [attr.aria-label]=\"props.ariaLabel\"\n >\n @if (props.caption) {\n <caption class=\"sr-only\">{{ props.caption }}</caption>\n }\n\n <thead>\n <tr>\n <!-- Selection column -->\n @if (props.showSelectionColumn && props.selection?.mode === 'multiple') {\n <th class=\"selection-cell\">\n <ion-checkbox\n [checked]=\"isAllSelected\"\n [indeterminate]=\"isIndeterminate\"\n (ionChange)=\"toggleSelectAll($event)\"\n ></ion-checkbox>\n </th>\n }\n @if (props.showSelectionColumn && props.selection?.mode === 'single') {\n <th class=\"selection-cell\"></th>\n }\n\n <!-- Row number column -->\n @if (props.showRowNumbers) {\n <th class=\"row-number-cell\">#</th>\n }\n\n <!-- Data columns -->\n @for (column of visibleColumns; track column.key) {\n <th\n [class]=\"getColumnClass(column)\"\n [style.width]=\"column.width\"\n [style.min-width]=\"column.minWidth\"\n [style.max-width]=\"column.maxWidth\"\n [class.sortable]=\"column.sortable\"\n [class.sorted]=\"currentSort?.column === column.key\"\n (click)=\"column.sortable ? onSort(column) : null\"\n [attr.aria-sort]=\"getAriaSort(column)\"\n >\n @if (column.headerTemplate) {\n <ng-container *ngTemplateOutlet=\"column.headerTemplate; context: { column }\"></ng-container>\n } @else {\n <span class=\"header-content\">\n {{ column.label }}\n @if (column.sortable) {\n <span class=\"sort-icons\">\n <ion-icon\n name=\"chevron-up-outline\"\n [class.active]=\"currentSort?.column === column.key && currentSort?.direction === 'asc'\"\n ></ion-icon>\n <ion-icon\n name=\"chevron-down-outline\"\n [class.active]=\"currentSort?.column === column.key && currentSort?.direction === 'desc'\"\n ></ion-icon>\n </span>\n }\n </span>\n }\n </th>\n }\n\n <!-- Actions column -->\n @if (props.actionsTemplate) {\n <th class=\"actions-cell\" [style.width]=\"props.actionsWidth || '100px'\">\n {{ props.actionsLabel || 'Acciones' }}\n </th>\n }\n </tr>\n </thead>\n\n <tbody>\n @if (displayedData.length === 0 && !props.loadingState?.loading) {\n <tr class=\"empty-row\">\n <td [attr.colspan]=\"totalColumns\">\n <div class=\"empty-state\">\n @if (emptyState.template) {\n <ng-container *ngTemplateOutlet=\"emptyState.template\"></ng-container>\n } @else {\n @if (emptyState.icon) {\n <ion-icon [name]=\"emptyState.icon\" class=\"empty-icon\"></ion-icon>\n }\n @if (emptyState.title) {\n <h4 class=\"empty-title\">{{ emptyState.title }}</h4>\n }\n @if (emptyState.description) {\n <p class=\"empty-description\">{{ emptyState.description }}</p>\n }\n }\n </div>\n </td>\n </tr>\n } @else {\n @for (row of displayedData; track trackByFn(row); let i = $index) {\n <tr\n [class.selected]=\"isRowSelected(row)\"\n [class.clickable]=\"props.rowClickable\"\n (click)=\"onRowClick(row, i, $event)\"\n >\n <!-- Selection cell -->\n @if (props.showSelectionColumn) {\n <td class=\"selection-cell\">\n @if (props.selection?.mode === 'multiple') {\n <ion-checkbox\n [checked]=\"isRowSelected(row)\"\n (ionChange)=\"toggleRowSelection(row, $event)\"\n (click)=\"$event.stopPropagation()\"\n ></ion-checkbox>\n } @else if (props.selection?.mode === 'single') {\n <input\n type=\"radio\"\n [checked]=\"isRowSelected(row)\"\n (change)=\"selectSingleRow(row)\"\n (click)=\"$event.stopPropagation()\"\n />\n }\n </td>\n }\n\n <!-- Row number -->\n @if (props.showRowNumbers) {\n <td class=\"row-number-cell\">{{ getRowNumber(i) }}</td>\n }\n\n <!-- Data cells -->\n @for (column of visibleColumns; track column.key) {\n <td\n [class]=\"getColumnClass(column)\"\n [style.text-align]=\"column.align\"\n >\n @if (column.cellTemplate) {\n <ng-container *ngTemplateOutlet=\"column.cellTemplate; context: { row, column, value: getCellValue(row, column) }\"></ng-container>\n } @else {\n {{ getFormattedValue(row, column) }}\n }\n </td>\n }\n\n <!-- Actions cell -->\n @if (props.actionsTemplate) {\n <td class=\"actions-cell\">\n <ng-container *ngTemplateOutlet=\"props.actionsTemplate; context: { row, index: i }\"></ng-container>\n </td>\n }\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n\n <!-- Pagination -->\n @if (props.showPagination && props.pagination) {\n <div class=\"pagination-container\">\n <div class=\"pagination-info\">\n <span>\n Mostrando {{ paginationStart }}-{{ paginationEnd }} de {{ props.pagination.total }}\n </span>\n\n @if (pageSizeOptions.length > 1) {\n <ion-select\n [value]=\"props.pagination.pageSize\"\n (ionChange)=\"onPageSizeChange($event)\"\n interface=\"popover\"\n class=\"page-size-select\"\n >\n @for (size of pageSizeOptions; track size) {\n <ion-select-option [value]=\"size\">{{ size }} por página</ion-select-option>\n }\n </ion-select>\n }\n </div>\n\n <div class=\"pagination-controls\">\n <ion-button\n fill=\"clear\"\n size=\"small\"\n [disabled]=\"props.pagination.page === 0\"\n (click)=\"goToPage(0)\"\n aria-label=\"Primera página\"\n >\n <ion-icon slot=\"icon-only\" name=\"chevron-back-outline\"></ion-icon>\n <ion-icon slot=\"icon-only\" name=\"chevron-back-outline\" style=\"margin-left: -12px\"></ion-icon>\n </ion-button>\n\n <ion-button\n fill=\"clear\"\n size=\"small\"\n [disabled]=\"props.pagination.page === 0\"\n (click)=\"goToPage(props.pagination.page - 1)\"\n aria-label=\"Página anterior\"\n >\n <ion-icon slot=\"icon-only\" name=\"chevron-back-outline\"></ion-icon>\n </ion-button>\n\n <span class=\"page-indicator\">\n {{ props.pagination.page + 1 }} / {{ totalPages }}\n </span>\n\n <ion-button\n fill=\"clear\"\n size=\"small\"\n [disabled]=\"props.pagination.page >= totalPages - 1\"\n (click)=\"goToPage(props.pagination.page + 1)\"\n aria-label=\"Página siguiente\"\n >\n <ion-icon slot=\"icon-only\" name=\"chevron-forward-outline\"></ion-icon>\n </ion-button>\n\n <ion-button\n fill=\"clear\"\n size=\"small\"\n [disabled]=\"props.pagination.page >= totalPages - 1\"\n (click)=\"goToPage(totalPages - 1)\"\n aria-label=\"Última página\"\n >\n <ion-icon slot=\"icon-only\" name=\"chevron-forward-outline\"></ion-icon>\n <ion-icon slot=\"icon-only\" name=\"chevron-forward-outline\" style=\"margin-left: -12px\"></ion-icon>\n </ion-button>\n </div>\n </div>\n }\n </div>\n `,\n styleUrls: ['./data-table.component.scss'],\n})\n/**\n * val-data-table\n *\n * A flexible data table component for displaying tabular data with sorting,\n * pagination, and selection features.\n *\n * @example Basic usage\n * ```html\n * <val-data-table\n * [props]=\"{\n * columns: [\n * { key: 'name', label: 'Nombre', sortable: true },\n * { key: 'email', label: 'Email' },\n * { key: 'status', label: 'Estado' }\n * ],\n * data: users\n * }\"\n * ></val-data-table>\n * ```\n *\n * @example With pagination and selection\n * ```html\n * <val-data-table\n * [props]=\"{\n * columns: columns,\n * data: participants,\n * showPagination: true,\n * pagination: {\n * page: 0,\n * pageSize: 25,\n * total: totalCount\n * },\n * selection: {\n * mode: 'multiple',\n * selected: selectedParticipants\n * },\n * showSelectionColumn: true\n * }\"\n * (selectionChange)=\"onSelectionChange($event)\"\n * (pageChange)=\"onPageChange($event)\"\n * ></val-data-table>\n * ```\n */\nexport class DataTableComponent<T = any> implements OnInit, OnChanges {\n @Input() props: DataTableMetadata<T>;\n\n @Output() rowClick = new EventEmitter<DataTableRowClickEvent<T>>();\n @Output() selectionChange = new EventEmitter<DataTableSelectionChangeEvent<T>>();\n @Output() sortChange = new EventEmitter<DataTableSortChangeEvent>();\n @Output() pageChange = new EventEmitter<DataTablePageChangeEvent>();\n\n displayedData: T[] = [];\n currentSort: DataTableSort | null = null;\n selectedRows: Set<any> = new Set();\n\n private langService = inject(LangService);\n\n ngOnInit(): void {\n this.initializeState();\n this.updateDisplayedData();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n this.initializeState();\n this.updateDisplayedData();\n }\n }\n\n private initializeState(): void {\n // Initialize sort\n this.currentSort = this.props.sort || null;\n\n // Initialize selection\n if (this.props.selection?.selected) {\n this.selectedRows = new Set(\n this.props.selection.selected.map(row => this.getRowId(row))\n );\n }\n }\n\n private updateDisplayedData(): void {\n let data = [...this.props.data];\n\n // Apply client-side sorting\n if (this.props.clientSort && this.currentSort) {\n data = this.sortData(data);\n }\n\n // Apply client-side pagination\n if (this.props.clientPagination && this.props.pagination) {\n const start = this.props.pagination.page * this.props.pagination.pageSize;\n const end = start + this.props.pagination.pageSize;\n data = data.slice(start, end);\n }\n\n this.displayedData = data;\n }\n\n private sortData(data: T[]): T[] {\n if (!this.currentSort) return data;\n\n const column = this.props.columns.find(c => c.key === this.currentSort?.column);\n if (!column) return data;\n\n return [...data].sort((a, b) => {\n if (column.sortFn) {\n const result = column.sortFn(a, b);\n return this.currentSort?.direction === 'desc' ? -result : result;\n }\n\n const valueA = this.getCellValue(a, column);\n const valueB = this.getCellValue(b, column);\n\n let comparison = 0;\n if (valueA == null && valueB == null) comparison = 0;\n else if (valueA == null) comparison = 1;\n else if (valueB == null) comparison = -1;\n else if (typeof valueA === 'string' && typeof valueB === 'string') {\n comparison = valueA.localeCompare(valueB);\n } else {\n comparison = valueA < valueB ? -1 : valueA > valueB ? 1 : 0;\n }\n\n return this.currentSort?.direction === 'desc' ? -comparison : comparison;\n });\n }\n\n get visibleColumns(): DataTableColumn<T>[] {\n return this.props.columns.filter(c => c.visible !== false);\n }\n\n get totalColumns(): number {\n let count = this.visibleColumns.length;\n if (this.props.showSelectionColumn) count++;\n if (this.props.showRowNumbers) count++;\n if (this.props.actionsTemplate) count++;\n return count;\n }\n\n get emptyState() {\n return this.props.emptyState || DEFAULT_EMPTY_STATE;\n }\n\n get pageSizeOptions(): number[] {\n return this.props.pagination?.pageSizeOptions || DEFAULT_PAGE_SIZE_OPTIONS;\n }\n\n get totalPages(): number {\n if (!this.props.pagination) return 1;\n return Math.ceil(this.props.pagination.total / this.props.pagination.pageSize);\n }\n\n get paginationStart(): number {\n if (!this.props.pagination) return 1;\n return this.props.pagination.page * this.props.pagination.pageSize + 1;\n }\n\n get paginationEnd(): number {\n if (!this.props.pagination) return this.displayedData.length;\n return Math.min(\n (this.props.pagination.page + 1) * this.props.pagination.pageSize,\n this.props.pagination.total\n );\n }\n\n get isAllSelected(): boolean {\n if (this.displayedData.length === 0) return false;\n return this.displayedData.every(row => this.isRowSelected(row));\n }\n\n get isIndeterminate(): boolean {\n const selectedCount = this.displayedData.filter(row => this.isRowSelected(row)).length;\n return selectedCount > 0 && selectedCount < this.displayedData.length;\n }\n\n getCellValue(row: T, column: DataTableColumn<T>): any {\n const field = column.field || column.key;\n return field.split('.').reduce((obj: any, key) => obj?.[key], row);\n }\n\n getFormattedValue(row: T, column: DataTableColumn<T>): string {\n const value = this.getCellValue(row, column);\n if (column.format) {\n return column.format(value, row);\n }\n return value ?? '';\n }\n\n getColumnClass(column: DataTableColumn<T>): string {\n const classes = [column.cssClass || ''];\n if (column.sticky) {\n classes.push(`sticky-${column.sticky}`);\n }\n if (column.align) {\n classes.push(`align-${column.align}`);\n }\n return classes.filter(Boolean).join(' ');\n }\n\n getAriaSort(column: DataTableColumn<T>): string | null {\n if (!column.sortable) return null;\n if (this.currentSort?.column !== column.key) return 'none';\n return this.currentSort.direction === 'asc' ? 'ascending' : 'descending';\n }\n\n getRowNumber(index: number): number {\n const start = this.props.rowNumberStart ?? 1;\n if (this.props.pagination) {\n return start + this.props.pagination.page * this.props.pagination.pageSize + index;\n }\n return start + index;\n }\n\n getRowId(row: T): any {\n if (this.props.selection?.trackBy) {\n return this.props.selection.trackBy(row);\n }\n return row;\n }\n\n trackByFn(row: T): any {\n return this.getRowId(row);\n }\n\n isRowSelected(row: T): boolean {\n return this.selectedRows.has(this.getRowId(row));\n }\n\n onSort(column: DataTableColumn<T>): void {\n if (!column.sortable) return;\n\n let direction: 'asc' | 'desc' | null = 'asc';\n\n if (this.currentSort?.column === column.key) {\n if (this.currentSort.direction === 'asc') {\n direction = 'desc';\n } else {\n direction = null;\n }\n }\n\n if (direction) {\n this.currentSort = { column: column.key, direction };\n } else {\n this.currentSort = null;\n }\n\n this.sortChange.emit({\n column: column.key,\n direction,\n });\n\n if (this.props.clientSort) {\n this.updateDisplayedData();\n }\n }\n\n onRowClick(row: T, index: number, event: MouseEvent): void {\n if (!this.props.rowClickable) return;\n\n this.rowClick.emit({\n row,\n index,\n event,\n });\n }\n\n toggleSelectAll(event: CustomEvent): void {\n const checked = event.detail.checked;\n\n if (checked) {\n this.displayedData.forEach(row => {\n this.selectedRows.add(this.getRowId(row));\n });\n } else {\n this.displayedData.forEach(row => {\n this.selectedRows.delete(this.getRowId(row));\n });\n }\n\n this.emitSelectionChange(checked ? 'selectAll' : 'deselectAll');\n }\n\n toggleRowSelection(row: T, event: CustomEvent): void {\n const rowId = this.getRowId(row);\n const checked = event.detail.checked;\n\n if (checked) {\n this.selectedRows.add(rowId);\n } else {\n this.selectedRows.delete(rowId);\n }\n\n this.emitSelectionChange(checked ? 'select' : 'deselect', row);\n }\n\n selectSingleRow(row: T): void {\n this.selectedRows.clear();\n this.selectedRows.add(this.getRowId(row));\n this.emitSelectionChange('select', row);\n }\n\n private emitSelectionChange(\n action: 'select' | 'deselect' | 'selectAll' | 'deselectAll',\n changedRow?: T\n ): void {\n const selected = this.props.data.filter(row => this.isRowSelected(row));\n\n this.selectionChange.emit({\n selected,\n changedRow,\n action,\n });\n }\n\n goToPage(page: number): void {\n if (!this.props.pagination) return;\n\n const previousPage = this.props.pagination.page;\n const maxPage = this.totalPages - 1;\n const newPage = Math.max(0, Math.min(page, maxPage));\n\n this.pageChange.emit({\n page: newPage,\n pageSize: this.props.pagination.pageSize,\n previousPage,\n });\n\n if (this.props.clientPagination) {\n this.props.pagination.page = newPage;\n this.updateDisplayedData();\n }\n }\n\n onPageSizeChange(event: CustomEvent): void {\n if (!this.props.pagination) return;\n\n const newPageSize = event.detail.value;\n const previousPage = this.props.pagination.page;\n\n // Recalculate page to keep first visible item\n const firstItem = previousPage * this.props.pagination.pageSize;\n const newPage = Math.floor(firstItem / newPageSize);\n\n this.pageChange.emit({\n page: newPage,\n pageSize: newPageSize,\n previousPage,\n });\n\n if (this.props.clientPagination) {\n this.props.pagination.pageSize = newPageSize;\n this.props.pagination.page = newPage;\n this.updateDisplayedData();\n }\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'val-layout',\n standalone: true,\n imports: [],\n template: `\n <div class=\"layout-container\">\n <ng-content></ng-content>\n </div>\n `,\n styleUrl: './layout.component.scss',\n})\nexport class LayoutComponent {}\n","import { NgStyle } from '@angular/common';\nimport { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { IonContent, IonHeader, IonTitle, IonToolbar } from '@ionic/angular/standalone';\nimport { ThemeService } from '../../../services/theme.service';\nimport { DividerComponent } from '../../atoms/divider/divider.component';\nimport { ExpandableTextComponent } from '../../molecules/expandable-text/expandable-text.component';\nimport { LinkComponent } from '../../molecules/link/link.component';\nimport { HeaderComponent } from '../../organisms/header/header.component';\nimport { LayoutComponent } from '../layout/layout.component';\nimport { SimpleMetadata } from './types';\n\n@Component({\n selector: 'val-simple',\n standalone: true,\n imports: [\n NgStyle,\n IonHeader,\n IonToolbar,\n IonTitle,\n IonContent,\n HeaderComponent,\n LayoutComponent,\n DividerComponent,\n LinkComponent,\n ExpandableTextComponent,\n ],\n template: `\n <val-header [props]=\"props.header\" />\n\n <ion-content\n [fullscreen]=\"true\"\n [ngStyle]=\"{\n '--background': theme.IsDark ? 'var(--ion-background-color)' : props.background,\n }\"\n [scrollEvents]=\"true\"\n (ionScroll)=\"onScrollHandler($event)\"\n >\n <ion-header collapse=\"condense\">\n <ion-toolbar style=\"--background: transparent;\">\n <ion-title style=\"padding: 0;\" size=\"large\">{{ props.pageTitle }}</ion-title>\n </ion-toolbar>\n </ion-header>\n @if (props.pageDescription) {\n <div class=\"description-container\">\n <val-expandable-text\n [props]=\"{\n limit: 180,\n content: props.pageDescription,\n color: 'primary',\n expandText: 'más',\n }\"\n />\n </div>\n }\n @if (props.link) {\n <val-link [props]=\"props.link\" (onClick)=\"onClickHandler($event)\"></val-link>\n }\n @if (props.withDivider) {\n <val-divider [props]=\"{ fill: 'solid', size: 'medium', color: 'dark' }\" />\n }\n <val-layout>\n <ng-content select=\"[inner-container]\"></ng-content>\n </val-layout>\n </ion-content>\n <ng-content select=\"[outter-container]\"></ng-content>\n `,\n styles: `\n .description-container {\n padding: 0px 16px;\n }\n `,\n})\nexport class SimpleComponent {\n @Input()\n props: SimpleMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n @Output()\n onScrollEvent = new EventEmitter<boolean>();\n\n theme = inject(ThemeService);\n\n onClickHandler(token?: string) {\n this.onClick.emit(token);\n }\n\n onScrollHandler($event: Event) {\n this.onScrollEvent.emit(true);\n }\n}\n","import { LanguagesContent, TextContent } from '../types';\n\nconst text: LanguagesContent = {\n es: {\n spanish: 'Español',\n english: 'Inglés',\n },\n en: {\n spanish: 'Spanish',\n english: 'English',\n },\n};\n\nexport default new TextContent(text);\n","import LangSettings from './components/lang-settings';\nimport { LanguagesContent, TextContent } from './types';\n\nexport interface Provider {\n [x: string]: TextContent;\n}\n\n/**\n * Global content that can be used across all components.\n * These are common texts like buttons, actions, states, etc.\n * Structure: {es: {key1: 'value1', key2: 'value2'}, en: {key1: 'value1', key2: 'value2'}, fr: {...}}\n *\n * Note: You can add any language code. The system will automatically detect available languages\n * and provide intelligent fallbacks with warnings for missing translations.\n */\nconst globalContentData: LanguagesContent = {\n es: {\n // Common buttons\n ok: 'Aceptar',\n cancel: 'Cancelar',\n save: 'Guardar',\n delete: 'Eliminar',\n edit: 'Editar',\n close: 'Cerrar',\n back: 'Volver',\n next: 'Siguiente',\n previous: 'Anterior',\n finish: 'Finalizar',\n continue: 'Continuar',\n\n // Common actions\n add: 'Agregar',\n remove: 'Quitar',\n search: 'Buscar',\n filter: 'Filtrar',\n sort: 'Ordenar',\n refresh: 'Actualizar',\n\n // Common states and messages\n loading: 'Cargando...',\n pleaseWait: 'Por favor espere...',\n noData: 'No hay datos disponibles',\n error: 'Error',\n success: 'Éxito',\n warning: 'Advertencia',\n info: 'Información',\n language: 'Idioma',\n\n // Common confirmations\n areYouSure: '¿Estás seguro?',\n\n // Language names (translated) - flat keys for type compatibility\n languageName_es: 'Español',\n languageName_en: 'Inglés',\n languageName_fr: 'Francés',\n languageName_de: 'Alemán',\n languageName_pt: 'Portugués',\n languageName_it: 'Italiano',\n languageName_zh: 'Chino',\n languageName_ja: 'Japonés',\n languageName_ko: 'Coreano',\n languageName_ru: 'Ruso',\n languageName_ar: 'Árabe',\n deleteConfirmation: '¿Estás seguro de que deseas eliminar {itemName}?',\n unsavedChanges: 'Tienes cambios sin guardar. ¿Deseas continuar?',\n\n // Common placeholders\n searchPlaceholder: 'Buscar...',\n select: 'Seleccionar...',\n selectOption: 'Seleccione una opción',\n selectLanguage: 'Seleccionar idioma...',\n\n // Status messages\n copied: '¡Copiado al portapapeles!',\n seeMore: 'ver más',\n selected: 'seleccionados',\n\n // Image preview\n zoomIn: 'Acercar',\n zoomOut: 'Alejar',\n resetZoom: 'Restablecer zoom',\n },\n en: {\n // Common buttons\n ok: 'OK',\n cancel: 'Cancel',\n save: 'Save',\n delete: 'Delete',\n edit: 'Edit',\n close: 'Close',\n back: 'Back',\n next: 'Next',\n previous: 'Previous',\n finish: 'Finish',\n continue: 'Continue',\n\n // Common actions\n add: 'Add',\n remove: 'Remove',\n search: 'Search',\n filter: 'Filter',\n sort: 'Sort',\n refresh: 'Refresh',\n\n // Common states and messages\n loading: 'Loading...',\n pleaseWait: 'Please wait...',\n noData: 'No data available',\n error: 'Error',\n success: 'Success',\n warning: 'Warning',\n info: 'Information',\n language: 'Language',\n\n // Common confirmations\n areYouSure: 'Are you sure?',\n\n // Language names (translated) - flat keys for type compatibility\n languageName_es: 'Spanish',\n languageName_en: 'English',\n languageName_fr: 'French',\n languageName_de: 'German',\n languageName_pt: 'Portuguese',\n languageName_it: 'Italian',\n languageName_zh: 'Chinese',\n languageName_ja: 'Japanese',\n languageName_ko: 'Korean',\n languageName_ru: 'Russian',\n languageName_ar: 'Arabic',\n deleteConfirmation: 'Are you sure you want to delete {itemName}?',\n unsavedChanges: 'You have unsaved changes. Do you want to continue?',\n\n // Common placeholders\n searchPlaceholder: 'Search...',\n select: 'Select...',\n selectOption: 'Select an option',\n selectLanguage: 'Select language...',\n\n // Status messages\n copied: 'Copied to clipboard!',\n seeMore: 'see more',\n selected: 'selected',\n\n // Image preview\n zoomIn: 'Zoom in',\n zoomOut: 'Zoom out',\n resetZoom: 'Reset zoom',\n },\n};\n\nconst GlobalContent = new TextContent(globalContentData);\n\n// ImageComponent specific content\nconst imageComponentData: LanguagesContent = {\n es: {\n close: 'Cerrar',\n zoomIn: 'Acercar',\n zoomOut: 'Alejar',\n resetZoom: 'Restablecer zoom',\n },\n en: {\n close: 'Close',\n zoomIn: 'Zoom in',\n zoomOut: 'Zoom out',\n resetZoom: 'Reset zoom',\n },\n};\n\nconst ImageComponentContent = new TextContent(imageComponentData);\n\nconst content: Provider = {\n _global: GlobalContent,\n LangSettings,\n ImageComponent: ImageComponentContent,\n};\n\nexport default content;\n\n// Export named exports for user convenience\nexport { content, GlobalContent, globalContentData };\n","import { Injectable } from '@angular/core';\nimport { ToastController, ToastOptions } from '@ionic/angular';\n\n/**\n * Service for displaying toast notifications using Ionic's ToastController.\n * Provides methods to show and present toasts with custom options.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ToastService {\n constructor(private toastController: ToastController) {}\n\n /**\n * Presents a toast notification with the given options.\n * @param request Toast options (message, duration, position, color, etc.)\n */\n async presentToast(request: ToastOptions) {\n const toast = await this.toastController.create({\n message: request.message,\n duration: request.duration,\n position: request.position,\n color: request.color,\n });\n\n await toast.present();\n }\n\n /**\n * Shows a toast notification and logs the result.\n * @param request Toast options (message, duration, position, color, etc.)\n */\n show(request: ToastOptions) {\n this.presentToast(request)\n .then(() => {\n console.info('Toast created');\n })\n .catch(error => {\n console.error(JSON.stringify(error));\n });\n }\n}\n","import { Color } from '@ionic/core';\n\n/**\n * Button configuration for confirmation dialog.\n */\nexport interface ConfirmationButton {\n /** Button text */\n text: string;\n /** Button role */\n role?: 'cancel' | 'destructive' | 'confirm';\n /** Button color (Ionic color) */\n color?: Color;\n /** CSS class for the button */\n cssClass?: string;\n /** Handler function called when button is clicked */\n handler?: () => void | Promise<void> | boolean | Promise<boolean>;\n}\n\n/**\n * Metadata for the confirmation dialog.\n */\nexport interface ConfirmationDialogMetadata {\n /** Dialog title */\n title: string;\n /** Dialog message/content */\n message: string;\n /** Confirm button configuration */\n confirmButton?: ConfirmationButton;\n /** Cancel button configuration */\n cancelButton?: ConfirmationButton;\n /** Additional buttons (between cancel and confirm) */\n extraButtons?: ConfirmationButton[];\n /** Allow dismissing by clicking backdrop */\n backdropDismiss?: boolean;\n /** CSS class for the alert */\n cssClass?: string;\n /** Alert mode */\n mode?: 'ios' | 'md';\n /** Unique token identifier */\n token?: string;\n /** Translucent backdrop */\n translucent?: boolean;\n /** Animated transitions */\n animated?: boolean;\n /** Header subtitle */\n subHeader?: string;\n}\n\n/**\n * Result from confirmation dialog.\n */\nexport interface ConfirmationResult {\n /** Whether the dialog was confirmed */\n confirmed: boolean;\n /** The role of the button clicked */\n role?: string;\n /** Any data returned */\n data?: any;\n}\n\n/**\n * Default confirmation dialog options.\n */\nexport const DEFAULT_CONFIRM_BUTTON: ConfirmationButton = {\n text: 'Confirm',\n role: 'confirm',\n color: 'primary',\n};\n\nexport const DEFAULT_CANCEL_BUTTON: ConfirmationButton = {\n text: 'Cancel',\n role: 'cancel',\n color: 'medium',\n};\n","import { Injectable, inject } from '@angular/core';\nimport { AlertController } from '@ionic/angular/standalone';\nimport {\n ConfirmationDialogMetadata,\n ConfirmationResult,\n ConfirmationButton,\n DEFAULT_CONFIRM_BUTTON,\n DEFAULT_CANCEL_BUTTON,\n} from './types';\n\n/**\n * Service for displaying confirmation dialogs.\n *\n * @example Basic usage\n * const result = await confirmationService.confirm({\n * title: 'Delete Item',\n * message: 'Are you sure you want to delete this item?',\n * });\n *\n * if (result.confirmed) {\n * // User confirmed\n * }\n *\n * @example Custom buttons\n * const result = await confirmationService.confirm({\n * title: 'Save Changes',\n * message: 'Do you want to save your changes before leaving?',\n * confirmButton: { text: 'Save', color: 'success' },\n * cancelButton: { text: 'Discard', color: 'danger' },\n * extraButtons: [{ text: 'Cancel', role: 'cancel' }]\n * });\n *\n * @example Destructive action\n * const result = await confirmationService.confirmDestructive({\n * title: 'Delete Account',\n * message: 'This action cannot be undone. Are you sure?',\n * });\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ConfirmationDialogService {\n private alertController = inject(AlertController);\n\n /**\n * Shows a confirmation dialog and returns the result.\n * @param options - Configuration for the dialog\n * @returns Promise resolving to the confirmation result\n */\n async confirm(options: ConfirmationDialogMetadata): Promise<ConfirmationResult> {\n const buttons = this.buildButtons(options);\n\n const alert = await this.alertController.create({\n header: options.title,\n subHeader: options.subHeader,\n message: options.message,\n buttons,\n backdropDismiss: options.backdropDismiss ?? false,\n cssClass: options.cssClass,\n mode: options.mode,\n translucent: options.translucent ?? false,\n animated: options.animated ?? true,\n });\n\n await alert.present();\n const { role, data } = await alert.onDidDismiss();\n\n return {\n confirmed: role === 'confirm',\n role,\n data,\n };\n }\n\n /**\n * Shows a simple confirmation dialog with default buttons.\n * @param title - Dialog title\n * @param message - Dialog message\n * @returns Promise resolving to true if confirmed, false otherwise\n */\n async confirmSimple(title: string, message: string): Promise<boolean> {\n const result = await this.confirm({ title, message });\n return result.confirmed;\n }\n\n /**\n * Shows a destructive action confirmation with red confirm button.\n * @param options - Configuration for the dialog\n * @returns Promise resolving to the confirmation result\n */\n async confirmDestructive(\n options: Omit<ConfirmationDialogMetadata, 'confirmButton'> & {\n confirmButton?: Partial<ConfirmationButton>;\n }\n ): Promise<ConfirmationResult> {\n return this.confirm({\n ...options,\n confirmButton: {\n text: options.confirmButton?.text || 'Delete',\n role: 'destructive',\n color: 'danger',\n cssClass: 'destructive-button',\n ...options.confirmButton,\n },\n });\n }\n\n /**\n * Shows an info alert with just an OK button.\n * @param title - Alert title\n * @param message - Alert message\n */\n async alert(title: string, message: string): Promise<void> {\n const alert = await this.alertController.create({\n header: title,\n message,\n buttons: [{ text: 'OK', role: 'confirm' }],\n });\n\n await alert.present();\n await alert.onDidDismiss();\n }\n\n /**\n * Shows a three-option dialog (Save, Discard, Cancel).\n * Common for unsaved changes scenarios.\n * @param title - Dialog title\n * @param message - Dialog message\n * @returns Promise resolving to 'save' | 'discard' | 'cancel'\n */\n async confirmSaveDiscard(\n title: string,\n message: string\n ): Promise<'save' | 'discard' | 'cancel'> {\n const alert = await this.alertController.create({\n header: title,\n message,\n backdropDismiss: false,\n buttons: [\n {\n text: 'Cancel',\n role: 'cancel',\n },\n {\n text: 'Discard',\n role: 'destructive',\n cssClass: 'text-danger',\n },\n {\n text: 'Save',\n role: 'confirm',\n },\n ],\n });\n\n await alert.present();\n const { role } = await alert.onDidDismiss();\n\n if (role === 'confirm') return 'save';\n if (role === 'destructive') return 'discard';\n return 'cancel';\n }\n\n private buildButtons(options: ConfirmationDialogMetadata): any[] {\n const buttons: any[] = [];\n\n // Cancel button\n const cancelBtn = options.cancelButton || DEFAULT_CANCEL_BUTTON;\n buttons.push({\n text: cancelBtn.text,\n role: cancelBtn.role || 'cancel',\n cssClass: cancelBtn.cssClass || `button-${cancelBtn.color || 'medium'}`,\n handler: cancelBtn.handler,\n });\n\n // Extra buttons (if any)\n if (options.extraButtons) {\n options.extraButtons.forEach((btn) => {\n buttons.push({\n text: btn.text,\n role: btn.role,\n cssClass: btn.cssClass || `button-${btn.color || 'medium'}`,\n handler: btn.handler,\n });\n });\n }\n\n // Confirm button\n const confirmBtn = options.confirmButton || DEFAULT_CONFIRM_BUTTON;\n buttons.push({\n text: confirmBtn.text,\n role: confirmBtn.role || 'confirm',\n cssClass: confirmBtn.cssClass || `button-${confirmBtn.color || 'primary'}`,\n handler: confirmBtn.handler,\n });\n\n return buttons;\n }\n}\n","import { Type } from '@angular/core';\nimport { Color } from '@ionic/core';\nimport { ButtonMetadata } from '../../components/types';\n\n/**\n * Modal size preset.\n */\nexport type ModalSize = 'small' | 'medium' | 'large' | 'full' | 'auto';\n\n/**\n * Modal breakpoint configuration for sheet modals.\n */\nexport interface ModalBreakpoint {\n /** Initial breakpoint (0-1) */\n initialBreakpoint?: number;\n /** Available breakpoints */\n breakpoints?: number[];\n /** Can dismiss by dragging below threshold */\n canDismiss?: boolean | (() => boolean | Promise<boolean>);\n /** Handle element */\n handleBehavior?: 'cycle' | 'none';\n /** Show handle */\n showHandle?: boolean;\n}\n\n/**\n * Modal header configuration.\n */\nexport interface ModalHeader {\n /** Title text */\n title?: string;\n /** Subtitle text */\n subtitle?: string;\n /** Show close button */\n showCloseButton?: boolean;\n /** Close button icon */\n closeIcon?: string;\n /** Header color */\n color?: Color;\n /** Custom CSS class */\n cssClass?: string;\n}\n\n/**\n * Modal footer configuration.\n */\nexport interface ModalFooter {\n /** Footer buttons */\n buttons?: ModalButton[];\n /** Footer alignment */\n alignment?: 'start' | 'center' | 'end' | 'space-between';\n /** Custom CSS class */\n cssClass?: string;\n}\n\n/**\n * Modal button configuration.\n */\nexport interface ModalButton {\n /** Button text */\n text: string;\n /** Button role */\n role?: 'cancel' | 'confirm' | 'destructive' | string;\n /** Button color */\n color?: Color;\n /** Button fill */\n fill?: 'clear' | 'outline' | 'solid';\n /** Button size */\n size?: 'small' | 'default' | 'large';\n /** Custom CSS class */\n cssClass?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Handler function */\n handler?: (data?: any) => void | boolean | Promise<void | boolean>;\n}\n\n/**\n * Metadata for creating a modal with a component.\n */\nexport interface ModalMetadata<T = any> {\n /** Component to render in modal */\n component: Type<T>;\n /** Component inputs/props */\n componentProps?: Partial<T>;\n /** Unique identifier */\n id?: string;\n /** Modal header configuration */\n header?: ModalHeader;\n /** Modal footer configuration */\n footer?: ModalFooter;\n /** Modal size */\n size?: ModalSize;\n /** Custom width (overrides size) */\n width?: string;\n /** Custom height (overrides size) */\n height?: string;\n /** Show backdrop */\n showBackdrop?: boolean;\n /** Backdrop dismiss */\n backdropDismiss?: boolean;\n /** Enable keyboard close (ESC) */\n keyboardClose?: boolean;\n /** CSS class for modal */\n cssClass?: string;\n /** Animation mode */\n mode?: 'ios' | 'md';\n /** Enter animation */\n enterAnimation?: any;\n /** Leave animation */\n leaveAnimation?: any;\n /** Sheet modal breakpoints */\n breakpoints?: ModalBreakpoint;\n /** Presenting element for card modal */\n presentingElement?: HTMLElement;\n /** Can dismiss callback */\n canDismiss?: boolean | (() => boolean | Promise<boolean>);\n /** Animated */\n animated?: boolean;\n}\n\n/**\n * Metadata for creating a simple content modal.\n */\nexport interface SimpleModalMetadata {\n /** Modal title */\n title: string;\n /** Modal content (HTML or plain text) */\n content: string;\n /** Modal size */\n size?: ModalSize;\n /** Footer buttons */\n buttons?: ModalButton[];\n /** Show close button in header */\n showCloseButton?: boolean;\n /** Backdrop dismiss */\n backdropDismiss?: boolean;\n /** CSS class */\n cssClass?: string;\n}\n\n/**\n * Result from modal dismissal.\n */\nexport interface ModalResult<T = any> {\n /** Role of the dismissal (button role or 'backdrop') */\n role?: string;\n /** Data returned from modal */\n data?: T;\n}\n\n/**\n * Default modal sizes.\n */\nexport const MODAL_SIZES: Record<ModalSize, { width?: string; height?: string }> = {\n small: { width: '300px', height: 'auto' },\n medium: { width: '500px', height: 'auto' },\n large: { width: '800px', height: '80vh' },\n full: { width: '100%', height: '100%' },\n auto: { width: 'auto', height: 'auto' },\n};\n\n/**\n * Default modal buttons.\n */\nexport const DEFAULT_MODAL_CONFIRM_BUTTON: ModalButton = {\n text: 'Confirm',\n role: 'confirm',\n color: 'primary',\n fill: 'solid',\n};\n\nexport const DEFAULT_MODAL_CANCEL_BUTTON: ModalButton = {\n text: 'Cancel',\n role: 'cancel',\n color: 'medium',\n fill: 'clear',\n};\n","import { Injectable, inject, Type } from '@angular/core';\nimport { ModalController } from '@ionic/angular/standalone';\nimport {\n ModalMetadata,\n SimpleModalMetadata,\n ModalResult,\n ModalButton,\n MODAL_SIZES,\n DEFAULT_MODAL_CONFIRM_BUTTON,\n DEFAULT_MODAL_CANCEL_BUTTON,\n} from './types';\n\n/**\n * ModalService\n *\n * A service for creating and managing modals with various configurations.\n *\n * @example Basic component modal\n * ```typescript\n * const result = await modalService.open({\n * component: MyFormComponent,\n * componentProps: { userId: 123 },\n * header: { title: 'Edit User', showCloseButton: true },\n * size: 'medium'\n * });\n *\n * if (result.role === 'confirm') {\n * console.log('Saved:', result.data);\n * }\n * ```\n *\n * @example Simple content modal\n * ```typescript\n * await modalService.openSimple({\n * title: 'Terms of Service',\n * content: '<p>Terms content here...</p>',\n * size: 'large',\n * showCloseButton: true\n * });\n * ```\n *\n * @example Sheet modal (mobile)\n * ```typescript\n * const result = await modalService.openSheet({\n * component: FilterComponent,\n * breakpoints: {\n * initialBreakpoint: 0.5,\n * breakpoints: [0, 0.5, 1],\n * showHandle: true\n * }\n * });\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ModalService {\n private modalController = inject(ModalController);\n\n /**\n * Opens a modal with a component.\n * @param options - Modal configuration\n * @returns Promise resolving to the modal result\n */\n async open<T = any, R = any>(options: ModalMetadata<T>): Promise<ModalResult<R>> {\n const size = MODAL_SIZES[options.size || 'medium'];\n const cssClasses = this.buildCssClasses(options);\n\n const modal = await this.modalController.create({\n component: options.component,\n componentProps: {\n ...options.componentProps,\n // Pass modal reference for dismiss from within component\n _modalRef: {\n dismiss: (data?: any, role?: string) => modal.dismiss(data, role),\n },\n },\n id: options.id,\n showBackdrop: options.showBackdrop ?? true,\n backdropDismiss: options.backdropDismiss ?? true,\n keyboardClose: options.keyboardClose ?? true,\n cssClass: cssClasses,\n mode: options.mode,\n animated: options.animated ?? true,\n canDismiss: this.normalizeCanDismiss(options.canDismiss ?? true),\n presentingElement: options.presentingElement,\n // Sheet modal options\n initialBreakpoint: options.breakpoints?.initialBreakpoint,\n breakpoints: options.breakpoints?.breakpoints,\n handle: options.breakpoints?.showHandle,\n handleBehavior: options.breakpoints?.handleBehavior,\n });\n\n // Apply custom size styles\n if (options.width || options.height || size) {\n const modalEl = modal as HTMLIonModalElement;\n modalEl.style.setProperty('--width', options.width || size.width || 'auto');\n modalEl.style.setProperty('--height', options.height || size.height || 'auto');\n }\n\n await modal.present();\n const { data, role } = await modal.onDidDismiss();\n\n return { data, role };\n }\n\n /**\n * Opens a simple content modal without a custom component.\n * Uses Ionic's alert-like styling but with modal capabilities.\n * @param options - Simple modal configuration\n * @returns Promise resolving to the modal result\n */\n async openSimple(options: SimpleModalMetadata): Promise<ModalResult> {\n // Import the simple modal component dynamically\n const { SimpleModalContentComponent } = await import('./simple-modal-content.component');\n\n return this.open({\n component: SimpleModalContentComponent,\n componentProps: {\n title: options.title,\n content: options.content,\n buttons: options.buttons || [DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON],\n showCloseButton: options.showCloseButton ?? true,\n },\n size: options.size || 'medium',\n backdropDismiss: options.backdropDismiss ?? true,\n cssClass: ['simple-modal', options.cssClass].filter(Boolean).join(' '),\n });\n }\n\n /**\n * Opens a confirmation modal.\n * @param title - Modal title\n * @param message - Modal message\n * @param confirmButton - Confirm button config (optional)\n * @param cancelButton - Cancel button config (optional)\n * @returns Promise resolving to true if confirmed\n */\n async confirm(\n title: string,\n message: string,\n confirmButton?: Partial<ModalButton>,\n cancelButton?: Partial<ModalButton>\n ): Promise<boolean> {\n const result = await this.openSimple({\n title,\n content: message,\n size: 'small',\n showCloseButton: false,\n backdropDismiss: false,\n buttons: [\n { ...DEFAULT_MODAL_CANCEL_BUTTON, ...cancelButton },\n { ...DEFAULT_MODAL_CONFIRM_BUTTON, ...confirmButton },\n ],\n });\n\n return result.role === 'confirm';\n }\n\n /**\n * Opens a sheet modal (iOS-style bottom sheet).\n * @param options - Modal configuration with sheet-specific options\n * @returns Promise resolving to the modal result\n */\n async openSheet<T = any, R = any>(\n options: Omit<ModalMetadata<T>, 'breakpoints'> & {\n initialBreakpoint?: number;\n breakpoints?: number[];\n showHandle?: boolean;\n }\n ): Promise<ModalResult<R>> {\n return this.open({\n ...options,\n breakpoints: {\n initialBreakpoint: options.initialBreakpoint ?? 0.5,\n breakpoints: options.breakpoints ?? [0, 0.5, 1],\n showHandle: options.showHandle ?? true,\n },\n cssClass: ['sheet-modal', options.cssClass].filter(Boolean).join(' '),\n });\n }\n\n /**\n * Opens a fullscreen modal.\n * @param options - Modal configuration\n * @returns Promise resolving to the modal result\n */\n async openFullscreen<T = any, R = any>(options: ModalMetadata<T>): Promise<ModalResult<R>> {\n return this.open({\n ...options,\n size: 'full',\n cssClass: ['fullscreen-modal', options.cssClass].filter(Boolean).join(' '),\n });\n }\n\n /**\n * Dismisses the top-most modal.\n * @param data - Optional data to return\n * @param role - Optional role\n */\n async dismiss(data?: any, role?: string): Promise<boolean> {\n return this.modalController.dismiss(data, role);\n }\n\n /**\n * Gets the top-most modal.\n */\n async getTop(): Promise<HTMLIonModalElement | undefined> {\n return this.modalController.getTop();\n }\n\n private normalizeCanDismiss(\n canDismiss: boolean | (() => boolean | Promise<boolean>)\n ): boolean | ((data?: any, role?: string) => Promise<boolean>) {\n if (typeof canDismiss === 'boolean') {\n return canDismiss;\n }\n // Wrap the function to ensure it returns a Promise\n return async (data?: any, role?: string) => {\n const result = canDismiss();\n return Promise.resolve(result);\n };\n }\n\n private buildCssClasses(options: ModalMetadata): string {\n const classes: string[] = ['val-modal'];\n\n if (options.size) {\n classes.push(`modal-${options.size}`);\n }\n\n if (options.header) {\n classes.push('modal-with-header');\n }\n\n if (options.footer) {\n classes.push('modal-with-footer');\n }\n\n if (options.cssClass) {\n classes.push(options.cssClass);\n }\n\n return classes.join(' ');\n }\n}\n","import { Observable, map } from 'rxjs';\nimport { LangService } from '../../services/lang-provider/lang-provider.service';\n\n/**\n * Content utilities for reactive text binding in components.\n *\n * These utilities provide a convenient way to bind component properties\n * to language content that automatically updates when the language changes.\n */\n\n/**\n * Unified configuration for content binding with optional interpolation.\n * Supports both simple content retrieval and content with dynamic values.\n */\nexport interface ContentConfig {\n /**\n * The component class name (used for content lookup).\n * If omitted, searches in global content (_global namespace).\n */\n className?: string;\n /** The content key to retrieve */\n key: string;\n /** Optional fallback text if content is not found */\n fallback?: string;\n /** Optional object with values to interpolate into the content string */\n interpolation?: Record<string, string | number>;\n}\n\n/**\n * @deprecated Use ContentConfig with interpolation property instead.\n * This interface is kept for backward compatibility.\n */\nexport interface InterpolatedContentConfig extends ContentConfig {\n /** Object with values to interpolate into the content string */\n interpolation?: Record<string, string | number>;\n}\n\n/**\n * Create a reactive content observable from a content key.\n * This is the primary utility for the `fromContent` pattern with unified support\n * for both simple content and content with interpolation.\n *\n * @param langService - The language service instance\n * @param config - Content configuration with optional interpolation\n * @returns Observable that emits the content string and updates on language change\n *\n * @example Simple content:\n * ```typescript\n * // Component-specific content\n * this.title$ = fromContent(this.langService, {\n * className: 'HeaderComponent',\n * key: 'title',\n * fallback: 'Default Title'\n * });\n *\n * // Global content (no className needed)\n * this.saveButton$ = fromContent(this.langService, {\n * key: 'save'\n * });\n * ```\n *\n * @example Content with interpolation:\n * ```typescript\n * // Content: \"Hello {name}, you have {count} messages\"\n * this.greeting$ = fromContent(this.langService, {\n * className: 'WelcomeComponent',\n * key: 'greeting',\n * interpolation: { name: 'John', count: 5 }\n * });\n * // Results in: \"Hello John, you have 5 messages\"\n * ```\n */\nexport function fromContent(langService: LangService, config: ContentConfig): Observable<string> {\n // Use _global as default className if not provided\n const finalClassName = config.className || '_global';\n\n const contentObservable = langService.getContent(finalClassName, config.key, config.fallback);\n\n // If interpolation is provided, apply it\n if (config.interpolation) {\n return contentObservable.pipe(\n map(content => interpolateContent(content, config.interpolation))\n );\n }\n\n return contentObservable;\n}\n\n/**\n * Create a reactive content observable with interpolation support.\n *\n * @deprecated Use fromContent() with interpolation property instead.\n * This method is kept for backward compatibility.\n *\n * @param langService - The language service instance\n * @param config - Interpolated content configuration\n * @returns Observable that emits the interpolated content string\n *\n * @example Migration:\n * ```typescript\n * // OLD (deprecated):\n * this.greeting$ = fromContentWithInterpolation(this.langService, {\n * className: 'WelcomeComponent',\n * key: 'greeting',\n * interpolation: { name: 'John', count: 5 }\n * });\n *\n * // NEW (recommended):\n * this.greeting$ = fromContent(this.langService, {\n * className: 'WelcomeComponent',\n * key: 'greeting',\n * interpolation: { name: 'John', count: 5 }\n * });\n * ```\n */\nexport function fromContentWithInterpolation(\n langService: LangService,\n config: InterpolatedContentConfig\n): Observable<string> {\n // Delegate to the unified fromContent method\n return fromContent(langService, config);\n}\n\n/**\n * Create multiple reactive content observables at once.\n * Useful when a component needs several content strings.\n *\n * @param langService - The language service instance\n * @param className - The component class name\n * @param keys - Array of content keys to retrieve\n * @returns Observable that emits an object with all requested content\n *\n * @example\n * ```typescript\n * this.content$ = fromMultipleContent(this.langService, 'FormComponent', [\n * 'title', 'submitButton', 'cancelButton'\n * ]);\n *\n * // In template\n * <ng-container *ngIf=\"content$ | async as content\">\n * <h2>{{ content.title }}</h2>\n * <button>{{ content.submitButton }}</button>\n * <button>{{ content.cancelButton }}</button>\n * </ng-container>\n * ```\n */\nexport function fromMultipleContent(\n langService: LangService,\n className: string,\n keys: string[]\n): Observable<Record<string, string>> {\n return langService.getMultipleContent(className, keys);\n}\n\n/**\n * Helper function to interpolate values into a content string.\n * Replaces placeholders in the format {key} with corresponding values.\n *\n * @param content - The content string with placeholders\n * @param values - Object with values to interpolate\n * @returns The interpolated string\n *\n * @example\n * ```typescript\n * const result = interpolateContent(\"Hello {name}!\", { name: \"World\" });\n * // Returns: \"Hello World!\"\n * ```\n */\nexport function interpolateContent(\n content: string,\n values?: Record<string, string | number>\n): string {\n if (!values) return content;\n\n return Object.entries(values).reduce((result, [key, value]) => {\n return result.replace(new RegExp(`\\\\{${key}\\\\}`, 'g'), String(value));\n }, content);\n}\n\n/**\n * Type-safe content key builder for better IDE support.\n * This is a utility type that can be used to ensure content keys exist.\n *\n * @example\n * ```typescript\n * // Define your component's content keys\n * interface MyComponentContent {\n * title: string;\n * description: string;\n * submitButton: string;\n * }\n *\n * // Use with type safety\n * const titleKey: ContentKey<MyComponentContent> = 'title'; // ✓ Valid\n * const invalidKey: ContentKey<MyComponentContent> = 'invalid'; // ✗ Type error\n * ```\n */\nexport type ContentKey<T> = keyof T & string;\n\n/**\n * Factory function to create a content helper bound to a specific component class.\n * This creates a more convenient API for components that need multiple content strings.\n *\n * @param langService - The language service instance\n * @param className - The component class name\n * @returns Object with convenient methods for content retrieval\n *\n * @example\n * ```typescript\n * export class MyComponent {\n * private content = createContentHelper(this.langService, 'MyComponent');\n *\n * constructor(private langService: LangService) {}\n *\n * ngOnInit() {\n * this.title$ = this.content.get('title');\n * this.allContent$ = this.content.getMultiple(['title', 'description']);\n * }\n * }\n * ```\n */\nexport function createContentHelper(langService: LangService, className: string) {\n return {\n /**\n * Get a single content string reactively.\n */\n get(key: string, fallback?: string): Observable<string> {\n return fromContent(langService, { className, key, fallback });\n },\n\n /**\n * Get multiple content strings reactively.\n */\n getMultiple(keys: string[]): Observable<Record<string, string>> {\n return fromMultipleContent(langService, className, keys);\n },\n\n /**\n * Get content with interpolation.\n */\n getWithInterpolation(\n key: string,\n interpolation: Record<string, string | number>,\n fallback?: string\n ): Observable<string> {\n return fromContentWithInterpolation(langService, {\n className,\n key,\n interpolation,\n fallback,\n });\n },\n\n /**\n * Get a single content string synchronously (current language only).\n */\n getText(key: string, fallback?: string): string {\n return langService.getText(className, key, fallback);\n },\n\n /**\n * Check if a content key exists.\n */\n hasContent(key: string): boolean {\n return langService.hasContent(className, key);\n },\n };\n}\n","/*\n * Public API Surface of valtech-components\n */\n\nexport * from './lib/components/atoms/avatar/avatar.component';\nexport * from './lib/components/atoms/avatar/types';\nexport * from './lib/components/atoms/box/box.component';\nexport * from './lib/components/atoms/box/types';\nexport * from './lib/components/atoms/button/button.component';\nexport * from './lib/components/atoms/button/factory';\nexport * from './lib/components/atoms/display/display.component';\nexport * from './lib/components/atoms/display/types';\nexport * from './lib/components/atoms/divider/divider.component';\nexport * from './lib/components/atoms/divider/types';\nexport * from './lib/components/atoms/href/href.component';\nexport * from './lib/components/atoms/href/types';\nexport * from './lib/components/atoms/icon/icon.component';\nexport * from './lib/components/atoms/icon/types';\nexport * from './lib/components/atoms/image/image.component';\nexport * from './lib/components/atoms/image/types';\nexport * from './lib/components/atoms/progress-bar/progress-bar.component';\nexport * from './lib/components/atoms/progress-bar/types';\nexport * from './lib/components/atoms/text/text.component';\nexport * from './lib/components/atoms/text/types';\nexport * from './lib/components/atoms/title/title.component';\nexport * from './lib/components/atoms/title/types';\nexport * from './lib/components/atoms/skeleton/skeleton.component';\nexport * from './lib/components/atoms/skeleton/types';\nexport * from './lib/components/atoms/progress-ring/progress-ring.component';\nexport * from './lib/components/atoms/progress-ring/types';\nexport * from './lib/components/atoms/fab/fab.component';\nexport * from './lib/components/atoms/fab/types';\nexport * from './lib/components/atoms/qr-code/qr-code.component';\nexport * from './lib/components/atoms/qr-code/types';\nexport * from './lib/components/atoms/countdown/countdown.component';\nexport * from './lib/components/atoms/countdown/types';\nexport * from './lib/components/atoms/price-tag/price-tag.component';\nexport * from './lib/components/atoms/price-tag/types';\n\nexport * from './lib/components/molecules/alert-box/alert-box.component';\nexport * from './lib/components/molecules/alert-box/types';\nexport * from './lib/components/molecules/button-group/button-group.component';\nexport * from './lib/components/molecules/button-group/types';\nexport * from './lib/components/molecules/card/card.component';\nexport * from './lib/components/molecules/card/types';\nexport * from './lib/components/molecules/check-input/check-input.component';\nexport * from './lib/components/molecules/comment-input/comment-input.component';\nexport * from './lib/components/molecules/content-loader/content-loader.component';\nexport * from './lib/components/molecules/content-loader/types';\nexport * from './lib/components/molecules/date-input/date-input.component';\nexport * from './lib/components/molecules/email-input/email-input.component';\nexport * from './lib/components/molecules/expandable-text/expandable-text.component';\nexport * from './lib/components/molecules/expandable-text/types';\nexport * from './lib/components/molecules/file-input/file-input.component';\nexport * from './lib/components/molecules/hint/hint.component';\nexport * from './lib/components/molecules/hour-input/hour-input.component';\nexport * from './lib/components/molecules/language-selector/language-selector.component';\nexport * from './lib/components/molecules/language-selector/types';\nexport * from './lib/components/molecules/layered-card/layered-card.component';\nexport * from './lib/components/molecules/layered-card/types';\nexport * from './lib/components/molecules/link/link.component';\nexport * from './lib/components/molecules/link/types';\nexport * from './lib/components/molecules/links-cake/links-cake.component';\nexport * from './lib/components/molecules/links-cake/types';\nexport * from './lib/components/molecules/notes-box/notes-box.component';\nexport * from './lib/components/molecules/notes-box/types';\nexport * from './lib/components/molecules/number-input/number-input.component';\nexport * from './lib/components/molecules/number-from-to/number-from-to.component';\nexport * from './lib/components/molecules/password-input/password-input.component';\nexport * from './lib/components/molecules/pin-input/pin-input.component';\nexport * from './lib/components/molecules/popover-selector/popover-selector.component';\nexport * from './lib/components/molecules/popover-selector/types';\nexport * from './lib/components/molecules/progress-status/progress-status.component';\nexport * from './lib/components/molecules/progress-status/types';\nexport * from './lib/components/molecules/prompter/prompter.component';\nexport * from './lib/components/molecules/prompter/types';\nexport * from './lib/components/molecules/radio-input/radio-input.component';\nexport * from './lib/components/molecules/range-input/range-input.component';\nexport * from './lib/components/molecules/range-input/types';\nexport * from './lib/components/molecules/searchbar/searchbar.component';\nexport * from './lib/components/molecules/select-input/select-input.component';\nexport * from './lib/components/molecules/select-search/select-search.component';\nexport * from './lib/components/molecules/segment-control/segment-control.component';\nexport * from './lib/components/molecules/segment-control/types';\nexport * from './lib/components/molecules/text-input/text-input.component';\nexport * from './lib/components/molecules/toggle-input/toggle-input.component';\nexport * from './lib/components/molecules/toggle-input/types';\nexport * from './lib/components/molecules/title-block/title-block.component';\nexport * from './lib/components/molecules/title-block/types';\nexport * from './lib/components/molecules/code-display/code-display.component';\nexport * from './lib/components/molecules/code-display/types';\nexport * from './lib/components/molecules/action-header/action-header.component';\nexport * from './lib/components/molecules/action-header/types';\nexport * from './lib/components/molecules/pill/pill.component';\nexport * from './lib/components/molecules/pill/types';\nexport * from './lib/components/molecules/command-display/command-display.component';\nexport * from './lib/components/molecules/command-display/types';\nexport * from './lib/components/molecules/info/info.component';\nexport * from './lib/components/molecules/info/types';\nexport * from './lib/components/molecules/plain-code-box/plain-code-box.component';\nexport * from './lib/components/molecules/plain-code-box/types';\nexport * from './lib/components/molecules/accordion/accordion.component';\nexport * from './lib/components/molecules/accordion/types';\nexport * from './lib/components/molecules/tabs/tabs.component';\nexport * from './lib/components/molecules/tabs/types';\nexport * from './lib/components/molecules/breadcrumb/breadcrumb.component';\nexport * from './lib/components/molecules/breadcrumb/types';\nexport * from './lib/components/molecules/pagination/pagination.component';\nexport * from './lib/components/molecules/pagination/types';\nexport * from './lib/components/molecules/stepper/stepper.component';\nexport * from './lib/components/molecules/stepper/types';\nexport * from './lib/components/molecules/chip-group/chip-group.component';\nexport * from './lib/components/molecules/chip-group/types';\nexport * from './lib/components/molecules/rating/rating.component';\nexport * from './lib/components/molecules/rating/types';\nexport * from './lib/components/molecules/timeline/timeline.component';\nexport * from './lib/components/molecules/timeline/types';\nexport * from './lib/components/molecules/stats-card/stats-card.component';\nexport * from './lib/components/molecules/stats-card/types';\nexport * from './lib/components/molecules/comment/comment.component';\nexport * from './lib/components/molecules/comment/types';\nexport * from './lib/components/molecules/multi-select-search/multi-select-search.component';\nexport * from './lib/components/molecules/quote-box/quote-box.component';\nexport * from './lib/components/molecules/textarea-input/textarea-input.component';\nexport * from './lib/components/molecules/textarea-input/types';\nexport * from './lib/components/molecules/phone-input/phone-input.component';\nexport * from './lib/components/molecules/phone-input/types';\nexport * from './lib/components/molecules/currency-input/currency-input.component';\nexport * from './lib/components/molecules/currency-input/types';\nexport * from './lib/components/molecules/date-range-input/date-range-input.component';\nexport * from './lib/components/molecules/date-range-input/types';\nexport * from './lib/components/molecules/number-stepper/number-stepper.component';\nexport * from './lib/components/molecules/number-stepper/types';\nexport * from './lib/components/molecules/ticket-grid/ticket-grid.component';\nexport * from './lib/components/molecules/ticket-grid/types';\nexport * from './lib/components/molecules/share-buttons/share-buttons.component';\nexport * from './lib/components/molecules/share-buttons/types';\nexport * from './lib/components/molecules/winner-display/winner-display.component';\nexport * from './lib/components/molecules/winner-display/types';\nexport * from './lib/components/molecules/raffle-status-card/raffle-status-card.component';\nexport * from './lib/components/molecules/raffle-status-card/types';\nexport * from './lib/components/molecules/participant-card/participant-card.component';\nexport * from './lib/components/molecules/participant-card/types';\nexport * from './lib/components/molecules/glow-card/glow-card.component';\nexport * from './lib/components/molecules/glow-card/types';\n\nexport * from './lib/components/organisms/article/article.component';\nexport * from './lib/components/organisms/article/types';\nexport * from './lib/components/organisms/banner/banner.component';\nexport * from './lib/components/organisms/banner/types';\nexport * from './lib/components/organisms/footer/footer.component';\nexport * from './lib/components/organisms/form/factory';\nexport * from './lib/components/organisms/form/form-footer/form-footer.component';\nexport * from './lib/components/organisms/form/form.component';\nexport * from './lib/components/organisms/header/header.component';\nexport * from './lib/components/organisms/header/types';\nexport * from './lib/components/organisms/item-list/item-list.component';\nexport * from './lib/components/organisms/item-list/types';\nexport * from './lib/components/organisms/no-content/no-content.component';\nexport * from './lib/components/organisms/no-content/types';\nexport * from './lib/components/organisms/toolbar/toolbar.component';\nexport * from './lib/components/organisms/toolbar/types';\nexport * from './lib/components/organisms/wizard/types';\nexport * from './lib/components/organisms/wizard/wizard-footer/wizard-footer.component';\nexport * from './lib/components/organisms/wizard/wizard.component';\nexport * from './lib/components/organisms/comment-section/comment-section.component';\nexport * from './lib/components/organisms/comment-section/types';\nexport * from './lib/components/organisms/data-table/data-table.component';\nexport * from './lib/components/organisms/data-table/types';\n\nexport * from './lib/components/templates/layout/layout.component';\nexport * from './lib/components/templates/simple/simple.component';\nexport * from './lib/components/templates/simple/types';\n\nexport * from './lib/services/download.service';\nexport * from './lib/services/icons.service';\nexport * from './lib/services/in-app-browser.service';\nexport * from './lib/services/lang-provider/content';\nexport * from './lib/services/lang-provider/lang-provider.service';\nexport * from './lib/services/lang-provider/types';\nexport * from './lib/services/link-processor.service';\nexport * from './lib/services/local-storage.service';\nexport * from './lib/services/navigation.service';\nexport * from './lib/services/theme.service';\nexport * from './lib/services/toast.service';\nexport * from './lib/services/types';\nexport * from './lib/services/confirmation-dialog/confirmation-dialog.service';\nexport * from './lib/services/confirmation-dialog/types';\nexport * from './lib/services/qr-generator/qr-generator.service';\nexport * from './lib/services/qr-generator/types';\nexport * from './lib/services/modal/modal.service';\nexport * from './lib/services/modal/types';\n\nexport * from './lib/components/types';\nexport * from './lib/shared/pipes/process-links.pipe';\nexport * from './lib/shared/utils/content';\nexport * from './lib/shared/utils/dom';\nexport * from './lib/shared/utils/form-defaults';\n// Export specific functions from simple-content to avoid conflicts\nexport {\n createReactiveContentMetadata,\n extractContentConfig,\n extractContentConfigWithInterpolation,\n interpolateStaticContent,\n ReactiveContentMetadata,\n ReactiveContentWithInterpolation,\n ReactiveTextMetadata,\n shouldUseReactiveContent,\n shouldUseReactiveContentWithInterpolation,\n} from './lib/shared/utils/simple-content';\nexport * from './lib/shared/utils/styles';\nexport * from './lib/shared/utils/text';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.IconService","i2","interpolateContent","fromContentWithInterpolation","i1.DownloadService","i2.IconService","i3.NavigationService","i4.LangService","i1","i1.LangService","i2.LinkProcessorService","map","i3","ToastController"],"mappings":"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"}
|