@dropi/ui-components 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitignore +13 -0
- package/CONTRIBUTING.md +188 -0
- package/MIGRATION_STEPS.md +39 -0
- package/PUBLISH_CHECKLIST.md +97 -0
- package/QUICK_START.md +108 -0
- package/README.md +146 -0
- package/jest.config.ts +21 -0
- package/ng-package.json +8 -0
- package/package.json +66 -0
- package/project.json +48 -0
- package/publish.sh +113 -0
- package/src/components-source/accordion/accordion-item/accordion-item.component.html +12 -0
- package/src/components-source/accordion/accordion-item/accordion-item.component.scss +47 -0
- package/src/components-source/accordion/accordion-item/accordion-item.component.spec.ts +122 -0
- package/src/components-source/accordion/accordion-item/accordion-item.component.ts +42 -0
- package/src/components-source/accordion/accordion.component.html +3 -0
- package/src/components-source/accordion/accordion.component.scss +5 -0
- package/src/components-source/accordion/accordion.component.spec.ts +243 -0
- package/src/components-source/accordion/accordion.component.stories.ts +111 -0
- package/src/components-source/accordion/accordion.component.ts +43 -0
- package/src/components-source/alert/alert.component.html +28 -0
- package/src/components-source/alert/alert.component.scss +154 -0
- package/src/components-source/alert/alert.component.spec.ts +185 -0
- package/src/components-source/alert/alert.component.stories.ts +310 -0
- package/src/components-source/alert/alert.component.ts +203 -0
- package/src/components-source/alert-legacy/alert.component.html +21 -0
- package/src/components-source/alert-legacy/alert.component.scss +42 -0
- package/src/components-source/alert-legacy/alert.component.spec.ts +159 -0
- package/src/components-source/alert-legacy/alert.component.ts +33 -0
- package/src/components-source/alert-modal/alert-modal.component.html +124 -0
- package/src/components-source/alert-modal/alert-modal.component.scss +203 -0
- package/src/components-source/alert-modal/alert-modal.component.spec.ts +557 -0
- package/src/components-source/alert-modal/alert-modal.component.stories.ts +295 -0
- package/src/components-source/alert-modal/alert-modal.component.ts +294 -0
- package/src/components-source/alert-modal/services/template-alert-modal.service.ts +75 -0
- package/src/components-source/badge/badge.component.html +49 -0
- package/src/components-source/badge/badge.component.scss +57 -0
- package/src/components-source/badge/badge.component.spec.ts +181 -0
- package/src/components-source/badge/badge.component.ts +21 -0
- package/src/components-source/breadcrumb/breadcrumb.component.html +5 -0
- package/src/components-source/breadcrumb/breadcrumb.component.scss +46 -0
- package/src/components-source/breadcrumb/breadcrumb.component.spec.ts +279 -0
- package/src/components-source/breadcrumb/breadcrumb.component.ts +24 -0
- package/src/components-source/card-product/card-product.component.html +173 -0
- package/src/components-source/card-product/card-product.component.spec.ts +601 -0
- package/src/components-source/card-product/card-product.component.stories.ts +322 -0
- package/src/components-source/card-product/card-product.component.ts +1101 -0
- package/src/components-source/card-section/card-section.component.html +22 -0
- package/src/components-source/card-section/card-section.component.scss +14 -0
- package/src/components-source/card-section/card-section.component.spec.ts +333 -0
- package/src/components-source/card-section/card-section.component.stories.ts +141 -0
- package/src/components-source/card-section/card-section.component.ts +35 -0
- package/src/components-source/checkbox-selection-list/checkbox-selection-list.component.html +38 -0
- package/src/components-source/checkbox-selection-list/checkbox-selection-list.component.scss +147 -0
- package/src/components-source/checkbox-selection-list/checkbox-selection-list.component.spec.ts +555 -0
- package/src/components-source/checkbox-selection-list/checkbox-selection-list.component.stories.ts +157 -0
- package/src/components-source/checkbox-selection-list/checkbox-selection-list.component.ts +219 -0
- package/src/components-source/city-selector/city-selector.component.html +22 -0
- package/src/components-source/city-selector/city-selector.component.scss +1 -0
- package/src/components-source/city-selector/city-selector.component.spec.ts +278 -0
- package/src/components-source/city-selector/city-selector.component.stories.ts +200 -0
- package/src/components-source/city-selector/city-selector.component.ts +151 -0
- package/src/components-source/color-picker/color-picker.component.html +54 -0
- package/src/components-source/color-picker/color-picker.component.scss +203 -0
- package/src/components-source/color-picker/color-picker.component.spec.ts +148 -0
- package/src/components-source/color-picker/color-picker.component.stories.ts +70 -0
- package/src/components-source/color-picker/color-picker.component.ts +353 -0
- package/src/components-source/country-flags/country-flags.component.html +10 -0
- package/src/components-source/country-flags/country-flags.component.scss +34 -0
- package/src/components-source/country-flags/country-flags.component.spec.ts +78 -0
- package/src/components-source/country-flags/country-flags.component.ts +18 -0
- package/src/components-source/date-picker/date-picker.component.html +35 -0
- package/src/components-source/date-picker/date-picker.component.scss +388 -0
- package/src/components-source/date-picker/date-picker.component.spec.ts +510 -0
- package/src/components-source/date-picker/date-picker.component.stories.ts +444 -0
- package/src/components-source/date-picker/date-picker.component.ts +313 -0
- package/src/components-source/date-picker/date-picker.stories.spec.ts +150 -0
- package/src/components-source/date-picker-range/date-picker-range.component.html +45 -0
- package/src/components-source/date-picker-range/date-picker-range.component.scss +229 -0
- package/src/components-source/date-picker-range/date-picker-range.component.spec.ts +555 -0
- package/src/components-source/date-picker-range/date-picker-range.component.ts +254 -0
- package/src/components-source/dropi-avatars/dropi-avatars.component.html +17 -0
- package/src/components-source/dropi-avatars/dropi-avatars.component.scss +58 -0
- package/src/components-source/dropi-avatars/dropi-avatars.component.spec.ts +403 -0
- package/src/components-source/dropi-avatars/dropi-avatars.component.ts +24 -0
- package/src/components-source/dropi-badge/dropi-badge.component.html +12 -0
- package/src/components-source/dropi-badge/dropi-badge.component.scss +50 -0
- package/src/components-source/dropi-badge/dropi-badge.component.spec.ts +108 -0
- package/src/components-source/dropi-badge/dropi-badge.component.stories.ts +140 -0
- package/src/components-source/dropi-badge/dropi-badge.component.ts +39 -0
- package/src/components-source/dropi-banner-external/dropi-banner-external.component.html +67 -0
- package/src/components-source/dropi-banner-external/dropi-banner-external.component.scss +46 -0
- package/src/components-source/dropi-banner-external/dropi-banner-external.component.spec.ts +170 -0
- package/src/components-source/dropi-banner-external/dropi-banner-external.component.stories.ts +203 -0
- package/src/components-source/dropi-banner-external/dropi-banner-external.component.ts +204 -0
- package/src/components-source/dropi-breadcrumb/dropi-breadcrumb.component.html +65 -0
- package/src/components-source/dropi-breadcrumb/dropi-breadcrumb.component.scss +65 -0
- package/src/components-source/dropi-breadcrumb/dropi-breadcrumb.component.spec.ts +125 -0
- package/src/components-source/dropi-breadcrumb/dropi-breadcrumb.component.ts +38 -0
- package/src/components-source/dropi-breadcrumb/dropi-breadcrumb.stories.ts +133 -0
- package/src/components-source/dropi-button/dropi-button.component.html +37 -0
- package/src/components-source/dropi-button/dropi-button.component.scss +266 -0
- package/src/components-source/dropi-button/dropi-button.component.spec.ts +264 -0
- package/src/components-source/dropi-button/dropi-button.component.stories.ts +221 -0
- package/src/components-source/dropi-button/dropi-button.component.ts +82 -0
- package/src/components-source/dropi-card-checkbox/dropi-card-checkbox.component.html +24 -0
- package/src/components-source/dropi-card-checkbox/dropi-card-checkbox.component.scss +85 -0
- package/src/components-source/dropi-card-checkbox/dropi-card-checkbox.component.spec.ts +157 -0
- package/src/components-source/dropi-card-checkbox/dropi-card-checkbox.component.stories.ts +209 -0
- package/src/components-source/dropi-card-checkbox/dropi-card-checkbox.component.ts +41 -0
- package/src/components-source/dropi-carousel/dropi-carousel.component.html +57 -0
- package/src/components-source/dropi-carousel/dropi-carousel.component.scss +156 -0
- package/src/components-source/dropi-carousel/dropi-carousel.component.spec.ts +224 -0
- package/src/components-source/dropi-carousel/dropi-carousel.component.ts +266 -0
- package/src/components-source/dropi-carousel/dropi-carousel.stories.ts +365 -0
- package/src/components-source/dropi-checkbox/dropi-checkbox.component.css +39 -0
- package/src/components-source/dropi-checkbox/dropi-checkbox.component.html +18 -0
- package/src/components-source/dropi-checkbox/dropi-checkbox.component.spec.ts +155 -0
- package/src/components-source/dropi-checkbox/dropi-checkbox.component.stories.ts +101 -0
- package/src/components-source/dropi-checkbox/dropi-checkbox.component.ts +25 -0
- package/src/components-source/dropi-chips/dropi-chips.component.html +10 -0
- package/src/components-source/dropi-chips/dropi-chips.component.scss +54 -0
- package/src/components-source/dropi-chips/dropi-chips.component.spec.ts +356 -0
- package/src/components-source/dropi-chips/dropi-chips.component.stories.ts +275 -0
- package/src/components-source/dropi-chips/dropi-chips.component.ts +100 -0
- package/src/components-source/dropi-country-selector/countries.data.ts +239 -0
- package/src/components-source/dropi-country-selector/dropi-country-selector.component.html +59 -0
- package/src/components-source/dropi-country-selector/dropi-country-selector.component.scss +126 -0
- package/src/components-source/dropi-country-selector/dropi-country-selector.component.spec.ts +244 -0
- package/src/components-source/dropi-country-selector/dropi-country-selector.component.stories.ts +117 -0
- package/src/components-source/dropi-country-selector/dropi-country-selector.component.ts +179 -0
- package/src/components-source/dropi-drawer/dropi-drawer.component.html +23 -0
- package/src/components-source/dropi-drawer/dropi-drawer.component.scss +88 -0
- package/src/components-source/dropi-drawer/dropi-drawer.component.spec.ts +84 -0
- package/src/components-source/dropi-drawer/dropi-drawer.component.ts +90 -0
- package/src/components-source/dropi-dropdown/dropi-dropdown.component.html +30 -0
- package/src/components-source/dropi-dropdown/dropi-dropdown.component.scss +58 -0
- package/src/components-source/dropi-dropdown/dropi-dropdown.component.spec.ts +213 -0
- package/src/components-source/dropi-dropdown/dropi-dropdown.component.stories.ts +143 -0
- package/src/components-source/dropi-dropdown/dropi-dropdown.component.ts +53 -0
- package/src/components-source/dropi-favorite-button/dropi-favorite-button.component.html +23 -0
- package/src/components-source/dropi-favorite-button/dropi-favorite-button.component.scss +21 -0
- package/src/components-source/dropi-favorite-button/dropi-favorite-button.component.spec.ts +240 -0
- package/src/components-source/dropi-favorite-button/dropi-favorite-button.component.ts +31 -0
- package/src/components-source/dropi-file-upload/card-view/card-view.component.html +154 -0
- package/src/components-source/dropi-file-upload/card-view/card-view.component.scss +118 -0
- package/src/components-source/dropi-file-upload/card-view/card-view.component.ts +72 -0
- package/src/components-source/dropi-file-upload/drop-zone/drop-zone.coment.stories.ts +179 -0
- package/src/components-source/dropi-file-upload/drop-zone/drop-zone.component.html +111 -0
- package/src/components-source/dropi-file-upload/drop-zone/drop-zone.component.scss +90 -0
- package/src/components-source/dropi-file-upload/drop-zone/drop-zone.component.ts +172 -0
- package/src/components-source/dropi-file-upload/dropi-file-upload.component.html +42 -0
- package/src/components-source/dropi-file-upload/dropi-file-upload.component.scss +31 -0
- package/src/components-source/dropi-file-upload/dropi-file-upload.component.spec.ts +398 -0
- package/src/components-source/dropi-file-upload/dropi-file-upload.component.stories.ts +139 -0
- package/src/components-source/dropi-file-upload/dropi-file-upload.component.ts +329 -0
- package/src/components-source/dropi-file-upload/file-list/file-list.component.html +51 -0
- package/src/components-source/dropi-file-upload/file-list/file-list.component.scss +60 -0
- package/src/components-source/dropi-file-upload/file-list/file-list.component.ts +84 -0
- package/src/components-source/dropi-file-upload/grid-view/grid-view.component.html +77 -0
- package/src/components-source/dropi-file-upload/grid-view/grid-view.component.scss +85 -0
- package/src/components-source/dropi-file-upload/grid-view/grid-view.component.ts +35 -0
- package/src/components-source/dropi-ilustration-icon/dropi-ilustration-icon.component.html +38 -0
- package/src/components-source/dropi-ilustration-icon/dropi-ilustration-icon.component.scss +59 -0
- package/src/components-source/dropi-ilustration-icon/dropi-ilustration-icon.component.spec.ts +214 -0
- package/src/components-source/dropi-ilustration-icon/dropi-ilustration-icon.component.ts +65 -0
- package/src/components-source/dropi-image-overlay/dropi-image-overlay.component.html +54 -0
- package/src/components-source/dropi-image-overlay/dropi-image-overlay.component.scss +210 -0
- package/src/components-source/dropi-image-overlay/dropi-image-overlay.component.spec.ts +145 -0
- package/src/components-source/dropi-image-overlay/dropi-image-overlay.component.ts +76 -0
- package/src/components-source/dropi-image-overlay/dropi-image-overlay.stories.ts +267 -0
- package/src/components-source/dropi-languages-selector/dropi-languages-selector.component.html +17 -0
- package/src/components-source/dropi-languages-selector/dropi-languages-selector.component.scss +82 -0
- package/src/components-source/dropi-languages-selector/dropi-languages-selector.component.spec.ts +152 -0
- package/src/components-source/dropi-languages-selector/dropi-languages-selector.component.ts +41 -0
- package/src/components-source/dropi-logo/dropi-logo.component.html +3 -0
- package/src/components-source/dropi-logo/dropi-logo.component.scss +20 -0
- package/src/components-source/dropi-logo/dropi-logo.component.spec.ts +274 -0
- package/src/components-source/dropi-logo/dropi-logo.component.ts +24 -0
- package/src/components-source/dropi-modal/dropi-modal-stack.service.ts +75 -0
- package/src/components-source/dropi-modal/dropi-modal.component.html +55 -0
- package/src/components-source/dropi-modal/dropi-modal.component.scss +274 -0
- package/src/components-source/dropi-modal/dropi-modal.component.spec.ts +46 -0
- package/src/components-source/dropi-modal/dropi-modal.component.stories.ts +392 -0
- package/src/components-source/dropi-modal/dropi-modal.component.ts +392 -0
- package/src/components-source/dropi-modal/p-template.directive.ts +11 -0
- package/src/components-source/dropi-navbar/dropi-navbar.component.html +41 -0
- package/src/components-source/dropi-navbar/dropi-navbar.component.scss +227 -0
- package/src/components-source/dropi-navbar/dropi-navbar.component.spec.ts +110 -0
- package/src/components-source/dropi-navbar/dropi-navbar.component.ts +52 -0
- package/src/components-source/dropi-paginator/dropi-paginator.component.html +64 -0
- package/src/components-source/dropi-paginator/dropi-paginator.component.scss +43 -0
- package/src/components-source/dropi-paginator/dropi-paginator.component.spec.ts +285 -0
- package/src/components-source/dropi-paginator/dropi-paginator.component.stories.ts +345 -0
- package/src/components-source/dropi-paginator/dropi-paginator.component.ts +85 -0
- package/src/components-source/dropi-phone-input/dropi-phone-input.component.html +93 -0
- package/src/components-source/dropi-phone-input/dropi-phone-input.component.scss +224 -0
- package/src/components-source/dropi-phone-input/dropi-phone-input.component.spec.ts +376 -0
- package/src/components-source/dropi-phone-input/dropi-phone-input.component.ts +203 -0
- package/src/components-source/dropi-phone-input/numeric-input.directive.ts +17 -0
- package/src/components-source/dropi-radio-button/dropi-radio-button.component.html +8 -0
- package/src/components-source/dropi-radio-button/dropi-radio-button.component.scss +33 -0
- package/src/components-source/dropi-radio-button/dropi-radio-button.component.spec.ts +225 -0
- package/src/components-source/dropi-radio-button/dropi-radio-button.component.ts +48 -0
- package/src/components-source/dropi-search/dropi-search.component.html +124 -0
- package/src/components-source/dropi-search/dropi-search.component.scss +116 -0
- package/src/components-source/dropi-search/dropi-search.component.spec.ts +483 -0
- package/src/components-source/dropi-search/dropi-search.component.stories.ts +267 -0
- package/src/components-source/dropi-search/dropi-search.component.ts +230 -0
- package/src/components-source/dropi-select/dropi-select.component.html +158 -0
- package/src/components-source/dropi-select/dropi-select.component.scss +275 -0
- package/src/components-source/dropi-select/dropi-select.component.spec.ts +386 -0
- package/src/components-source/dropi-select/dropi-select.component.stories.ts +686 -0
- package/src/components-source/dropi-select/dropi-select.component.ts +465 -0
- package/src/components-source/dropi-skeleton/dropi-skeleton.component.html +10 -0
- package/src/components-source/dropi-skeleton/dropi-skeleton.component.scss +28 -0
- package/src/components-source/dropi-skeleton/dropi-skeleton.component.spec.ts +273 -0
- package/src/components-source/dropi-skeleton/dropi-skeleton.component.stories.ts +145 -0
- package/src/components-source/dropi-skeleton/dropi-skeleton.component.ts +30 -0
- package/src/components-source/dropi-steps/dropi-steps.component.html +29 -0
- package/src/components-source/dropi-steps/dropi-steps.component.scss +110 -0
- package/src/components-source/dropi-steps/dropi-steps.component.spec.ts +228 -0
- package/src/components-source/dropi-steps/dropi-steps.component.stories.ts +231 -0
- package/src/components-source/dropi-steps/dropi-steps.component.ts +98 -0
- package/src/components-source/dropi-switch/dropi-switch.component.html +4 -0
- package/src/components-source/dropi-switch/dropi-switch.component.scss +50 -0
- package/src/components-source/dropi-switch/dropi-switch.component.spec.ts +105 -0
- package/src/components-source/dropi-switch/dropi-switch.component.stories.ts +106 -0
- package/src/components-source/dropi-switch/dropi-switch.component.ts +22 -0
- package/src/components-source/dropi-table/dropi-table.component.html +395 -0
- package/src/components-source/dropi-table/dropi-table.component.scss +506 -0
- package/src/components-source/dropi-table/dropi-table.component.spec.ts +578 -0
- package/src/components-source/dropi-table/dropi-table.component.stories.ts +313 -0
- package/src/components-source/dropi-table/dropi-table.component.ts +580 -0
- package/src/components-source/dropi-tag/dropi-tag.component.html +17 -0
- package/src/components-source/dropi-tag/dropi-tag.component.scss +50 -0
- package/src/components-source/dropi-tag/dropi-tag.component.spec.ts +267 -0
- package/src/components-source/dropi-tag/dropi-tag.component.stories.ts +290 -0
- package/src/components-source/dropi-tag/dropi-tag.component.ts +92 -0
- package/src/components-source/dropi-text-area/droip-text-area.component.stories.ts +138 -0
- package/src/components-source/dropi-text-area/dropi-text-area.component.html +63 -0
- package/src/components-source/dropi-text-area/dropi-text-area.component.scss +106 -0
- package/src/components-source/dropi-text-area/dropi-text-area.component.spec.ts +507 -0
- package/src/components-source/dropi-text-area/dropi-text-area.component.ts +80 -0
- package/src/components-source/dropi-tooltip/dropi-tooltip.component.html +70 -0
- package/src/components-source/dropi-tooltip/dropi-tooltip.component.scss +250 -0
- package/src/components-source/dropi-tooltip/dropi-tooltip.component.spec.ts +423 -0
- package/src/components-source/dropi-tooltip/dropi-tooltip.component.ts +153 -0
- package/src/components-source/dropi-youtube-lazy-video/dropi-youtube-lazy-video.component.html +20 -0
- package/src/components-source/dropi-youtube-lazy-video/dropi-youtube-lazy-video.component.scss +63 -0
- package/src/components-source/dropi-youtube-lazy-video/dropi-youtube-lazy-video.component.spec.ts +121 -0
- package/src/components-source/dropi-youtube-lazy-video/dropi-youtube-lazy-video.component.ts +43 -0
- package/src/components-source/dropi-youtube-lazy-video/dropi-youtube-lazy-video.stories.ts +125 -0
- package/src/components-source/empty-state/empty-state.component.html +30 -0
- package/src/components-source/empty-state/empty-state.component.scss +76 -0
- package/src/components-source/empty-state/empty-state.component.spec.ts +244 -0
- package/src/components-source/empty-state/empty-state.component.stories.ts +198 -0
- package/src/components-source/empty-state/empty-state.component.ts +34 -0
- package/src/components-source/file-upload-progress-bar/file-upload-progress-bar.component.html +81 -0
- package/src/components-source/file-upload-progress-bar/file-upload-progress-bar.component.scss +86 -0
- package/src/components-source/file-upload-progress-bar/file-upload-progress-bar.component.spec.ts +27 -0
- package/src/components-source/file-upload-progress-bar/file-upload-progress-bar.component.stories.ts +149 -0
- package/src/components-source/file-upload-progress-bar/file-upload-progress-bar.component.ts +89 -0
- package/src/components-source/foundations/dropi-border-radius-demo/dropi-border-radius-demo.component.scss +32 -0
- package/src/components-source/foundations/dropi-border-radius-demo/dropi-border-radius-demo.component.ts +17 -0
- package/src/components-source/foundations/foundations.component.html +183 -0
- package/src/components-source/foundations/foundations.component.scss +31 -0
- package/src/components-source/foundations/foundations.component.ts +26 -0
- package/src/components-source/icon/icon-names.const.ts +270 -0
- package/src/components-source/icon/icon.component.html +3 -0
- package/src/components-source/icon/icon.component.scss +4 -0
- package/src/components-source/icon/icon.component.spec.ts +304 -0
- package/src/components-source/icon/icon.component.ts +53 -0
- package/src/components-source/index.ts +89 -0
- package/src/components-source/input/input.component.html +97 -0
- package/src/components-source/input/input.component.scss +149 -0
- package/src/components-source/input/input.component.spec.ts +243 -0
- package/src/components-source/input/input.component.stories.ts +269 -0
- package/src/components-source/input/input.component.ts +119 -0
- package/src/components-source/lottie-loader/lottie-loader.component.html +16 -0
- package/src/components-source/lottie-loader/lottie-loader.component.scss +32 -0
- package/src/components-source/lottie-loader/lottie-loader.component.spec.ts +103 -0
- package/src/components-source/lottie-loader/lottie-loader.component.ts +20 -0
- package/src/components-source/otp-send-code/mock-otp-services.ts +214 -0
- package/src/components-source/otp-send-code/otp-send-code.component.html +151 -0
- package/src/components-source/otp-send-code/otp-send-code.component.scss +156 -0
- package/src/components-source/otp-send-code/otp-send-code.component.spec.ts +419 -0
- package/src/components-source/otp-send-code/otp-send-code.component.stories.ts +190 -0
- package/src/components-source/otp-send-code/otp-send-code.component.ts +659 -0
- package/src/components-source/radio-selection-list/radio-selection-list.component.html +107 -0
- package/src/components-source/radio-selection-list/radio-selection-list.component.scss +280 -0
- package/src/components-source/radio-selection-list/radio-selection-list.component.spec.ts +243 -0
- package/src/components-source/radio-selection-list/radio-selection-list.component.stories.ts +313 -0
- package/src/components-source/radio-selection-list/radio-selection-list.component.ts +143 -0
- package/src/components-source/read-more/read-more.component.html +14 -0
- package/src/components-source/read-more/read-more.component.scss +16 -0
- package/src/components-source/read-more/read-more.component.spec.ts +272 -0
- package/src/components-source/read-more/read-more.component.stories.ts +131 -0
- package/src/components-source/read-more/read-more.component.ts +88 -0
- package/src/components-source/sidebar/sidebar.component.html +42 -0
- package/src/components-source/sidebar/sidebar.component.scss +70 -0
- package/src/components-source/sidebar/sidebar.component.spec.ts +354 -0
- package/src/components-source/sidebar/sidebar.component.stories.ts +145 -0
- package/src/components-source/sidebar/sidebar.component.ts +105 -0
- package/src/components-source/simple-stepper/simple-stepper.component.html +17 -0
- package/src/components-source/simple-stepper/simple-stepper.component.scss +117 -0
- package/src/components-source/simple-stepper/simple-stepper.component.spec.ts +348 -0
- package/src/components-source/simple-stepper/simple-stepper.component.stories.ts +104 -0
- package/src/components-source/simple-stepper/simple-stepper.component.ts +69 -0
- package/src/components-source/storybook-doc-components/avatars-storybook/avatars-storybook.component.html +192 -0
- package/src/components-source/storybook-doc-components/avatars-storybook/avatars-storybook.component.scss +15 -0
- package/src/components-source/storybook-doc-components/avatars-storybook/avatars-storybook.component.ts +17 -0
- package/src/components-source/storybook-doc-components/border-radius-storybook/border-radius-storybook.component.html +22 -0
- package/src/components-source/storybook-doc-components/border-radius-storybook/border-radius-storybook.component.scss +0 -0
- package/src/components-source/storybook-doc-components/border-radius-storybook/border-radius-storybook.component.ts +54 -0
- package/src/components-source/storybook-doc-components/breakpoints-and-grids-storybook/breakpoints-and-grids-storybook.component.css +81 -0
- package/src/components-source/storybook-doc-components/breakpoints-and-grids-storybook/breakpoints-and-grids-storybook.component.html +143 -0
- package/src/components-source/storybook-doc-components/breakpoints-and-grids-storybook/breakpoints-and-grids-storybook.component.ts +97 -0
- package/src/components-source/storybook-doc-components/colors-storybook/colors-storybook.component.css +10 -0
- package/src/components-source/storybook-doc-components/colors-storybook/colors-storybook.component.html +63 -0
- package/src/components-source/storybook-doc-components/colors-storybook/colors-storybook.component.ts +542 -0
- package/src/components-source/storybook-doc-components/dropi-modal/dropi-modal.component.html +132 -0
- package/src/components-source/storybook-doc-components/dropi-modal/dropi-modal.component.scss +15 -0
- package/src/components-source/storybook-doc-components/dropi-modal/dropi-modal.component.ts +67 -0
- package/src/components-source/storybook-doc-components/dropi-toast/dropi-toast.component.html +156 -0
- package/src/components-source/storybook-doc-components/dropi-toast/dropi-toast.component.scss +13 -0
- package/src/components-source/storybook-doc-components/dropi-toast/dropi-toast.component.ts +55 -0
- package/src/components-source/storybook-doc-components/flags-storybook/flags-storybook.component.css +0 -0
- package/src/components-source/storybook-doc-components/flags-storybook/flags-storybook.component.html +99 -0
- package/src/components-source/storybook-doc-components/flags-storybook/flags-storybook.component.ts +19 -0
- package/src/components-source/storybook-doc-components/icons-storybook/icons-storybook.component.css +82 -0
- package/src/components-source/storybook-doc-components/icons-storybook/icons-storybook.component.html +111 -0
- package/src/components-source/storybook-doc-components/icons-storybook/icons-storybook.component.ts +196 -0
- package/src/components-source/storybook-doc-components/logo-storybook/logo-foundations.component.ts +19 -0
- package/src/components-source/storybook-doc-components/logo-storybook/logo-storybook.component.css +0 -0
- package/src/components-source/storybook-doc-components/logo-storybook/logo-storybook.component.html +104 -0
- package/src/components-source/storybook-doc-components/lustration-storybook/lustration-storybook.component.css +0 -0
- package/src/components-source/storybook-doc-components/lustration-storybook/lustration-storybook.component.html +218 -0
- package/src/components-source/storybook-doc-components/lustration-storybook/lustration-storybook.component.ts +20 -0
- package/src/components-source/storybook-doc-components/shadow-storybook/shadow-storybook.component.html +21 -0
- package/src/components-source/storybook-doc-components/shadow-storybook/shadow-storybook.component.scss +0 -0
- package/src/components-source/storybook-doc-components/shadow-storybook/shadow-storybook.component.ts +66 -0
- package/src/components-source/storybook-doc-components/spacing-storybook/spacing-storybook.component.html +33 -0
- package/src/components-source/storybook-doc-components/spacing-storybook/spacing-storybook.component.scss +0 -0
- package/src/components-source/storybook-doc-components/spacing-storybook/spacing-storybook.component.ts +37 -0
- package/src/components-source/storybook-doc-components/story-page/story-page.component.html +74 -0
- package/src/components-source/storybook-doc-components/story-page/story-page.component.scss +103 -0
- package/src/components-source/storybook-doc-components/story-page/story-page.component.ts +424 -0
- package/src/components-source/storybook-doc-components/template-breakpoint-storybook/template-breakpoint-storybook.component.html +35 -0
- package/src/components-source/storybook-doc-components/template-breakpoint-storybook/template-breakpoint-storybook.component.scss +64 -0
- package/src/components-source/storybook-doc-components/template-breakpoint-storybook/template-breakpoint-storybook.component.ts +71 -0
- package/src/components-source/storybook-doc-components/tillte-table-documentation/tillte-table-documentation.component.html +44 -0
- package/src/components-source/storybook-doc-components/tillte-table-documentation/tillte-table-documentation.component.scss +270 -0
- package/src/components-source/storybook-doc-components/tillte-table-documentation/tillte-table-documentation.component.ts +153 -0
- package/src/components-source/tabs/tabs.component.html +26 -0
- package/src/components-source/tabs/tabs.component.scss +62 -0
- package/src/components-source/tabs/tabs.component.spec.ts +212 -0
- package/src/components-source/tabs/tabs.component.stories.ts +203 -0
- package/src/components-source/tabs/tabs.component.ts +138 -0
- package/src/components-source/tag-type-product/tag-type-product.component.html +1 -0
- package/src/components-source/tag-type-product/tag-type-product.component.scss +10 -0
- package/src/components-source/tag-type-product/tag-type-product.component.spec.ts +38 -0
- package/src/components-source/tag-type-product/tag-type-product.component.ts +9 -0
- package/src/components-source/toast/toast.component.html +37 -0
- package/src/components-source/toast/toast.component.scss +142 -0
- package/src/components-source/toast/toast.component.spec.ts +368 -0
- package/src/components-source/toast/toast.component.ts +59 -0
- package/src/components-source/toast/toast.stories.ts +69 -0
- package/src/components-source/tooltip/tooltip.component.html +46 -0
- package/src/components-source/tooltip/tooltip.component.scss +44 -0
- package/src/components-source/tooltip/tooltip.component.spec.ts +327 -0
- package/src/components-source/tooltip/tooltip.component.ts +24 -0
- package/src/components-source/ui-dropi.module.ts +125 -0
- package/src/components-source/ui-inventory.json +1138 -0
- package/src/components-source/vertical-steps/vertical-steps.component.html +35 -0
- package/src/components-source/vertical-steps/vertical-steps.component.scss +143 -0
- package/src/components-source/vertical-steps/vertical-steps.component.spec.ts +121 -0
- package/src/components-source/vertical-steps/vertical-steps.component.stories.ts +216 -0
- package/src/components-source/vertical-steps/vertical-steps.component.ts +151 -0
- package/src/index.ts +31 -0
- package/src/lib/bootstrap.ts +28 -0
- package/src/lib/dropi-ui-elements/dropi-ui-elements.component.html +1 -0
- package/src/lib/dropi-ui-elements/dropi-ui-elements.component.scss +0 -0
- package/src/lib/dropi-ui-elements/dropi-ui-elements.component.spec.ts +21 -0
- package/src/lib/dropi-ui-elements/dropi-ui-elements.component.ts +9 -0
- package/src/lib/elements-registry.ts +66 -0
- package/src/lib/elements.module.ts +22 -0
- package/src/styles.scss +152 -0
- package/src/test-setup.ts +6 -0
- package/tsconfig.json +28 -0
- package/tsconfig.lib.json +18 -0
- package/tsconfig.lib.prod.json +9 -0
- package/tsconfig.spec.json +12 -0
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
|
2
|
+
import { By } from '@angular/platform-browser';
|
|
3
|
+
import { DebugElement } from '@angular/core';
|
|
4
|
+
import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
|
5
|
+
import { ReadMoreComponent } from './read-more.component';
|
|
6
|
+
|
|
7
|
+
describe('ReadMoreComponent', () => {
|
|
8
|
+
let component: ReadMoreComponent;
|
|
9
|
+
let fixture: ComponentFixture<ReadMoreComponent>;
|
|
10
|
+
let debugElement: DebugElement;
|
|
11
|
+
let translateService: TranslateService;
|
|
12
|
+
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
// Crear el componente directamente sin TestBed para evitar problemas de dependencias
|
|
15
|
+
component = new ReadMoreComponent();
|
|
16
|
+
|
|
17
|
+
// Mock fixture básico
|
|
18
|
+
fixture = {
|
|
19
|
+
componentInstance: component,
|
|
20
|
+
detectChanges: () => {},
|
|
21
|
+
nativeElement: {},
|
|
22
|
+
} as any;
|
|
23
|
+
|
|
24
|
+
debugElement = null as any;
|
|
25
|
+
translateService = null as any;
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
describe('Inicialización del componente', () => {
|
|
29
|
+
it('should create', () => {
|
|
30
|
+
expect(component).toBeTruthy();
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('should initialize with default values', () => {
|
|
34
|
+
expect(component.text).toBe('');
|
|
35
|
+
expect(component.maxWords).toBe(20);
|
|
36
|
+
expect(component.textStyle).toBe('');
|
|
37
|
+
expect(component.buttonStyle).toBe('');
|
|
38
|
+
expect(component.showSeeLess).toBe(true);
|
|
39
|
+
expect(component.isExpanded).toBe(false);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('should initialize truncatedText on ngOnInit', () => {
|
|
43
|
+
const longText =
|
|
44
|
+
'This is a very long text with more than twenty words to test the truncation functionality properly';
|
|
45
|
+
component.text = longText;
|
|
46
|
+
component.maxWords = 5;
|
|
47
|
+
|
|
48
|
+
component.ngOnInit();
|
|
49
|
+
|
|
50
|
+
expect(component.truncatedText).toBe('This is a very long...');
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
describe('Propiedades de entrada', () => {
|
|
55
|
+
it('should accept text input', () => {
|
|
56
|
+
const testText = 'Test text content';
|
|
57
|
+
component.text = testText;
|
|
58
|
+
expect(component.text).toBe(testText);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it('should accept maxWords input', () => {
|
|
62
|
+
component.maxWords = 10;
|
|
63
|
+
expect(component.maxWords).toBe(10);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it('should accept textStyle input', () => {
|
|
67
|
+
const style = 'font-size: 16px; color: red;';
|
|
68
|
+
component.textStyle = style;
|
|
69
|
+
expect(component.textStyle).toBe(style);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it('should accept buttonStyle input', () => {
|
|
73
|
+
const style = 'color: blue; font-weight: bold;';
|
|
74
|
+
component.buttonStyle = style;
|
|
75
|
+
expect(component.buttonStyle).toBe(style);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it('should accept showSeeLess input', () => {
|
|
79
|
+
component.showSeeLess = false;
|
|
80
|
+
expect(component.showSeeLess).toBe(false);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
describe('Lógica de truncamiento de texto', () => {
|
|
85
|
+
it('should return empty string for non-string text', () => {
|
|
86
|
+
component.text = null as any;
|
|
87
|
+
const result = component.truncateText();
|
|
88
|
+
expect(result).toBe('');
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it('should return full text when expanded', () => {
|
|
92
|
+
const longText = 'This is a very long text with many words';
|
|
93
|
+
component.text = longText;
|
|
94
|
+
component.maxWords = 5;
|
|
95
|
+
component.isExpanded = true;
|
|
96
|
+
|
|
97
|
+
const result = component.truncateText();
|
|
98
|
+
expect(result).toBe(longText);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it('should return full text when word count is within limit', () => {
|
|
102
|
+
const shortText = 'Short text';
|
|
103
|
+
component.text = shortText;
|
|
104
|
+
component.maxWords = 20;
|
|
105
|
+
component.isExpanded = false;
|
|
106
|
+
|
|
107
|
+
const result = component.truncateText();
|
|
108
|
+
expect(result).toBe(shortText);
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it('should truncate text when exceeding maxWords limit', () => {
|
|
112
|
+
const longText = 'This is a very long text with many words to test truncation';
|
|
113
|
+
component.text = longText;
|
|
114
|
+
component.maxWords = 5;
|
|
115
|
+
component.isExpanded = false;
|
|
116
|
+
|
|
117
|
+
const result = component.truncateText();
|
|
118
|
+
expect(result).toBe('This is a very long...');
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
it('should handle text with exactly maxWords', () => {
|
|
122
|
+
const exactText = 'This has exactly five words';
|
|
123
|
+
component.text = exactText;
|
|
124
|
+
component.maxWords = 5;
|
|
125
|
+
component.isExpanded = false;
|
|
126
|
+
|
|
127
|
+
const result = component.truncateText();
|
|
128
|
+
expect(result).toBe(exactText);
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
it('should handle empty text', () => {
|
|
132
|
+
component.text = '';
|
|
133
|
+
component.maxWords = 10;
|
|
134
|
+
|
|
135
|
+
const result = component.truncateText();
|
|
136
|
+
expect(result).toBe('');
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
it('should handle text with only spaces', () => {
|
|
140
|
+
component.text = ' ';
|
|
141
|
+
component.maxWords = 5;
|
|
142
|
+
|
|
143
|
+
const result = component.truncateText();
|
|
144
|
+
expect(result).toBe(' ');
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
describe('Funcionalidad de expansión/contracción', () => {
|
|
149
|
+
it('should toggle isExpanded state', () => {
|
|
150
|
+
expect(component.isExpanded).toBe(false);
|
|
151
|
+
|
|
152
|
+
component.toggleExpanded();
|
|
153
|
+
expect(component.isExpanded).toBe(true);
|
|
154
|
+
|
|
155
|
+
component.toggleExpanded();
|
|
156
|
+
expect(component.isExpanded).toBe(false);
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
it('should update truncatedText when toggling', () => {
|
|
160
|
+
const longText = 'This is a very long text with many words to test functionality';
|
|
161
|
+
component.text = longText;
|
|
162
|
+
component.maxWords = 5;
|
|
163
|
+
component.ngOnInit();
|
|
164
|
+
|
|
165
|
+
expect(component.truncatedText).toBe('This is a very long...');
|
|
166
|
+
|
|
167
|
+
component.toggleExpanded();
|
|
168
|
+
expect(component.truncatedText).toBe(longText);
|
|
169
|
+
|
|
170
|
+
component.toggleExpanded();
|
|
171
|
+
expect(component.truncatedText).toBe('This is a very long...');
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
// Tests de DOM eliminados porque el componente se crea sin TestBed
|
|
176
|
+
// Para tests de DOM, se requiere configurar TestBed con el template completo
|
|
177
|
+
|
|
178
|
+
describe('Casos edge', () => {
|
|
179
|
+
it('should handle undefined text', () => {
|
|
180
|
+
component.text = undefined as any;
|
|
181
|
+
expect(() => component.ngOnInit()).not.toThrow();
|
|
182
|
+
expect(component.truncatedText).toBe('');
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
it('should handle zero maxWords', () => {
|
|
186
|
+
component.text = 'Some text';
|
|
187
|
+
component.maxWords = 0;
|
|
188
|
+
component.ngOnInit();
|
|
189
|
+
|
|
190
|
+
expect(component.truncatedText).toBe('...');
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
it('should handle negative maxWords', () => {
|
|
194
|
+
component.text = 'Some text here';
|
|
195
|
+
component.maxWords = -5;
|
|
196
|
+
component.ngOnInit();
|
|
197
|
+
|
|
198
|
+
expect(component.truncatedText).toBe('...');
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
it('should handle text with multiple consecutive spaces', () => {
|
|
202
|
+
component.text = 'Text with multiple spaces';
|
|
203
|
+
component.maxWords = 2;
|
|
204
|
+
component.ngOnInit();
|
|
205
|
+
|
|
206
|
+
expect(component.truncatedText).toBe('Text...'); // trim() removes spaces before ellipsis
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
it('should handle very large maxWords value', () => {
|
|
210
|
+
const shortText = 'Just a few words';
|
|
211
|
+
component.text = shortText;
|
|
212
|
+
component.maxWords = 1000;
|
|
213
|
+
component.ngOnInit();
|
|
214
|
+
|
|
215
|
+
expect(component.truncatedText).toBe(shortText);
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
it('should handle single word text', () => {
|
|
219
|
+
component.text = 'SingleWord';
|
|
220
|
+
component.maxWords = 5;
|
|
221
|
+
component.ngOnInit();
|
|
222
|
+
|
|
223
|
+
expect(component.truncatedText).toBe('SingleWord');
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
it('should handle text that ends with spaces', () => {
|
|
227
|
+
component.text = 'This is a test text with trailing spaces ';
|
|
228
|
+
component.maxWords = 3;
|
|
229
|
+
component.ngOnInit();
|
|
230
|
+
|
|
231
|
+
expect(component.truncatedText).toBe('This is a...');
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
describe('Integración completa', () => {
|
|
236
|
+
it('should work with complete configuration', () => {
|
|
237
|
+
const longText =
|
|
238
|
+
'This is a comprehensive test of the ReadMore component with all features enabled and configured properly to ensure everything works as expected';
|
|
239
|
+
component.text = longText;
|
|
240
|
+
component.maxWords = 8;
|
|
241
|
+
component.textStyle = 'font-size: 14px; color: #333;';
|
|
242
|
+
component.buttonStyle = 'color: #007bff; text-decoration: underline;';
|
|
243
|
+
component.showSeeLess = true;
|
|
244
|
+
|
|
245
|
+
component.ngOnInit();
|
|
246
|
+
|
|
247
|
+
expect(component.truncatedText).toBe('This is a comprehensive test of the ReadMore...');
|
|
248
|
+
expect(component.isExpanded).toBe(false);
|
|
249
|
+
|
|
250
|
+
// Test expansion
|
|
251
|
+
component.toggleExpanded();
|
|
252
|
+
|
|
253
|
+
expect(component.isExpanded).toBe(true);
|
|
254
|
+
expect(component.truncatedText).toBe(longText);
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
it('should handle dynamic content changes', () => {
|
|
258
|
+
// Initial setup
|
|
259
|
+
component.text = 'Short text';
|
|
260
|
+
component.maxWords = 10;
|
|
261
|
+
component.ngOnInit();
|
|
262
|
+
|
|
263
|
+
// Change to long text
|
|
264
|
+
component.text =
|
|
265
|
+
'This is now a much longer text that should require truncation and show the toggle button';
|
|
266
|
+
component.maxWords = 5;
|
|
267
|
+
component.ngOnInit();
|
|
268
|
+
|
|
269
|
+
expect(component.truncatedText).toBe('This is now a much...');
|
|
270
|
+
});
|
|
271
|
+
});
|
|
272
|
+
});
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Read More component stories for Storybook
|
|
3
|
+
* @description A text truncation component that expands/collapses long content
|
|
4
|
+
*/
|
|
5
|
+
import { moduleMetadata, type Meta, type StoryObj } from '@storybook/angular';
|
|
6
|
+
import { HttpClient, HttpClientModule } from '@angular/common/http';
|
|
7
|
+
import { TranslateModule, TranslateLoader, TranslateService } from '@ngx-translate/core';
|
|
8
|
+
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
|
|
9
|
+
|
|
10
|
+
import { ReadMoreComponent } from './read-more.component';
|
|
11
|
+
import { Injector } from '@angular/core';
|
|
12
|
+
|
|
13
|
+
export function HttpLoaderFactory(http: HttpClient) {
|
|
14
|
+
return new TranslateHttpLoader(http, '/assets/i18n/es', '.json');
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const meta: Meta<ReadMoreComponent> = {
|
|
18
|
+
title: 'UI Dropi/Read More',
|
|
19
|
+
component: ReadMoreComponent,
|
|
20
|
+
tags: ['autodocs'],
|
|
21
|
+
parameters: {
|
|
22
|
+
docs: {
|
|
23
|
+
description: {
|
|
24
|
+
component: `
|
|
25
|
+
# Read More Component
|
|
26
|
+
|
|
27
|
+
A text truncation component with expand/collapse functionality.
|
|
28
|
+
|
|
29
|
+
## Key Features
|
|
30
|
+
- **Word limit**: Truncate text after a specified number of words
|
|
31
|
+
- **Expand/collapse**: Toggle between truncated and full text
|
|
32
|
+
- **Custom styling**: Apply custom styles to text and button
|
|
33
|
+
- **Optional "See less"**: Configure whether collapse button is shown
|
|
34
|
+
`,
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
decorators: [
|
|
39
|
+
// Decorador para agregar configuraciones de ngx-translate
|
|
40
|
+
moduleMetadata({
|
|
41
|
+
imports: [
|
|
42
|
+
HttpClientModule,
|
|
43
|
+
TranslateModule.forRoot({
|
|
44
|
+
loader: {
|
|
45
|
+
provide: TranslateLoader,
|
|
46
|
+
useFactory: HttpLoaderFactory,
|
|
47
|
+
deps: [HttpClient],
|
|
48
|
+
},
|
|
49
|
+
}),
|
|
50
|
+
],
|
|
51
|
+
providers: [
|
|
52
|
+
{
|
|
53
|
+
provide: TranslateService,
|
|
54
|
+
useClass: TranslateService,
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
}),
|
|
58
|
+
],
|
|
59
|
+
argTypes: {
|
|
60
|
+
text: {
|
|
61
|
+
control: 'text',
|
|
62
|
+
description: 'The text to be truncated.',
|
|
63
|
+
value: '',
|
|
64
|
+
},
|
|
65
|
+
maxWords: {
|
|
66
|
+
control: 'number',
|
|
67
|
+
description: 'The maximum number of words to display before truncating the text.',
|
|
68
|
+
value: 20,
|
|
69
|
+
},
|
|
70
|
+
textStyle: {
|
|
71
|
+
control: 'text',
|
|
72
|
+
description: 'The style to be applied to the truncated text.',
|
|
73
|
+
value: '',
|
|
74
|
+
},
|
|
75
|
+
buttonStyle: {
|
|
76
|
+
control: 'text',
|
|
77
|
+
description: 'The style to be applied to the expand/collapse button.',
|
|
78
|
+
value: '',
|
|
79
|
+
},
|
|
80
|
+
showSeeLess: {
|
|
81
|
+
control: 'boolean',
|
|
82
|
+
description: 'Whether to show the "See less" button.',
|
|
83
|
+
value: true,
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
export default meta;
|
|
89
|
+
type Story = StoryObj<ReadMoreComponent>;
|
|
90
|
+
|
|
91
|
+
export const Default: Story = {
|
|
92
|
+
args: {
|
|
93
|
+
text: 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, quod. loreem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, quod. lorem ipsum lorem',
|
|
94
|
+
maxWords: 20,
|
|
95
|
+
showSeeLess: true,
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
export const WithMaxWords: Story = {
|
|
100
|
+
args: {
|
|
101
|
+
text: 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, quod. loreem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, quod. lorem ipsum lorem',
|
|
102
|
+
maxWords: 5,
|
|
103
|
+
showSeeLess: true,
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
export const WithoutSeeLess: Story = {
|
|
108
|
+
args: {
|
|
109
|
+
text: 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, quod. loreem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, quod. lorem ipsum lorem',
|
|
110
|
+
maxWords: 5,
|
|
111
|
+
showSeeLess: false,
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
export const LongText: Story = {
|
|
116
|
+
args: {
|
|
117
|
+
text: 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, quod. loreem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, quod. lorem ipsum lorem lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, quod. loreem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, quod. lorem ipsum lorem lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, quod. loreem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, quod. lorem ipsum lorem lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, quod. loreem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, quod. lorem ipsum lorem',
|
|
118
|
+
maxWords: 10,
|
|
119
|
+
showSeeLess: true,
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export const CustomStyle: Story = {
|
|
124
|
+
args: {
|
|
125
|
+
text: 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, quod. loreem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, quod. lorem ipsum lorem',
|
|
126
|
+
maxWords: 10,
|
|
127
|
+
showSeeLess: true,
|
|
128
|
+
textStyle: 'color: red;',
|
|
129
|
+
buttonStyle: 'color: blue;',
|
|
130
|
+
},
|
|
131
|
+
};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA, Input } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* A component that displays a truncated version of a text string, with an option
|
|
7
|
+
* to expand the text to its full length.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* <app-read-more
|
|
11
|
+
* [text]="'This is a very long text'"
|
|
12
|
+
* [maxCharacters]="150"
|
|
13
|
+
* [textStyle]="'font-size: 14px'"
|
|
14
|
+
* [buttonStyle]="'color: blue'"
|
|
15
|
+
* [showSeeLess]="true"
|
|
16
|
+
* ></app-read-more>
|
|
17
|
+
*/
|
|
18
|
+
@Component({
|
|
19
|
+
selector: 'app-read-more',
|
|
20
|
+
standalone: true,
|
|
21
|
+
imports: [CommonModule, TranslateModule],
|
|
22
|
+
templateUrl: './read-more.component.html',
|
|
23
|
+
styleUrls: ['./read-more.component.scss'],
|
|
24
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
25
|
+
})
|
|
26
|
+
export class ReadMoreComponent {
|
|
27
|
+
/**
|
|
28
|
+
* Text to be displayed
|
|
29
|
+
*/
|
|
30
|
+
@Input() text: string = '';
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Maximum number of words to display before truncating the text
|
|
34
|
+
*/
|
|
35
|
+
@Input() maxWords: number = 20;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* CSS styles for the text element
|
|
39
|
+
*/
|
|
40
|
+
@Input() textStyle: string = '';
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* CSS styles for the expand/collapse button
|
|
44
|
+
*/
|
|
45
|
+
@Input() buttonStyle: string = '';
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Whether to show the "see less" button when the text is expanded
|
|
49
|
+
*/
|
|
50
|
+
@Input() showSeeLess: boolean = true;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Current state of the component, expanded or not
|
|
54
|
+
*/
|
|
55
|
+
isExpanded: boolean = false;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Truncated version of the text
|
|
59
|
+
*/
|
|
60
|
+
truncatedText: string = '';
|
|
61
|
+
|
|
62
|
+
ngOnInit(): void {
|
|
63
|
+
this.truncatedText = this.truncateText();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Truncates the text to the maxWords limit if it is longer than
|
|
68
|
+
* that. If the text is shorter than maxWords, it is returned verbatim.
|
|
69
|
+
* If isExpanded is true, the text is not truncated.
|
|
70
|
+
*/
|
|
71
|
+
truncateText(): string {
|
|
72
|
+
if (typeof this.text !== 'string') return '';
|
|
73
|
+
|
|
74
|
+
if (this.isExpanded || this.text.split(' ').length <= this.maxWords) return this.text;
|
|
75
|
+
return this.text.split(' ').slice(0, this.maxWords).join(' ').trim() + '...';
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Toggle the expanded state of the text. If the text is currently expanded,
|
|
80
|
+
* calling this function will truncate it to the maxCharacters limit. If the
|
|
81
|
+
* text is currently truncated, calling this function will expand it to its
|
|
82
|
+
* full length.
|
|
83
|
+
*/
|
|
84
|
+
toggleExpanded(): void {
|
|
85
|
+
this.isExpanded = !this.isExpanded;
|
|
86
|
+
this.truncatedText = this.truncateText();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<div class="main-sidebar-container">
|
|
2
|
+
<ng-container *ngFor="let item of sideBarProperties">
|
|
3
|
+
<div
|
|
4
|
+
class="sidebar-option"
|
|
5
|
+
[ngClass]="item.active ? 'sidebar-active-option' : 'sidebar-default-option'"
|
|
6
|
+
(click)="onItemClick(item)"
|
|
7
|
+
>
|
|
8
|
+
<app-icon
|
|
9
|
+
[name]="item.icon"
|
|
10
|
+
width="20px"
|
|
11
|
+
height="20px"
|
|
12
|
+
[color]="item.active ? 'Primary-Primary-500' : 'Gray-Gray-500'"
|
|
13
|
+
></app-icon>
|
|
14
|
+
<span>{{ item.text | translate }}</span>
|
|
15
|
+
<app-icon
|
|
16
|
+
*ngIf="item.subItems && item.subItems.length > 0"
|
|
17
|
+
class="arrow"
|
|
18
|
+
[ngClass]="{
|
|
19
|
+
'arrow-expanded': item.expandedMenu
|
|
20
|
+
}"
|
|
21
|
+
name="Dropdown-down"
|
|
22
|
+
width="20px"
|
|
23
|
+
height="20px"
|
|
24
|
+
[color]="item.active ? 'Primary-Primary-500' : 'Gray-Gray-500'"
|
|
25
|
+
></app-icon>
|
|
26
|
+
</div>
|
|
27
|
+
<ng-container *ngIf="item.subItems && item.subItems.length > 0">
|
|
28
|
+
<div
|
|
29
|
+
class="sidebar-sub-item"
|
|
30
|
+
*ngFor="let subOption of item.subItems"
|
|
31
|
+
(click)="onSubItemClick(subOption)"
|
|
32
|
+
[ngClass]="{
|
|
33
|
+
'sidebar-expanded': item.expandedMenu,
|
|
34
|
+
'sidebar-sub-item-default': !subOption.active,
|
|
35
|
+
'sidebar-sub-item-active': subOption.active
|
|
36
|
+
}"
|
|
37
|
+
>
|
|
38
|
+
{{ subOption.text | translate }}
|
|
39
|
+
</div>
|
|
40
|
+
</ng-container>
|
|
41
|
+
</ng-container>
|
|
42
|
+
</div>
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
.main-sidebar-container {
|
|
2
|
+
margin-top: 20px;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.sidebar-option {
|
|
6
|
+
height: 45px;
|
|
7
|
+
display: flex;
|
|
8
|
+
align-items: center;
|
|
9
|
+
position: relative;
|
|
10
|
+
font-weight: var(--font-weight-medium);
|
|
11
|
+
gap: var(--Size-3);
|
|
12
|
+
padding: var(--Size-3);
|
|
13
|
+
font-size: var(--font-size-s);
|
|
14
|
+
border-radius: var(--Border-1);
|
|
15
|
+
min-width: 147px;
|
|
16
|
+
cursor: pointer;
|
|
17
|
+
|
|
18
|
+
.arrow {
|
|
19
|
+
position: absolute;
|
|
20
|
+
right: 17px;
|
|
21
|
+
transition: transform 0.3s ease;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.arrow-expanded {
|
|
25
|
+
transform: rotate(180deg);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.sidebar-default-option {
|
|
30
|
+
color: var(--Gray-Gray-500);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.sidebar-active-option {
|
|
34
|
+
color: var(--Primary-Primary-500);
|
|
35
|
+
background-color: #fef8f1;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.sidebar-sub-item {
|
|
39
|
+
overflow: hidden;
|
|
40
|
+
max-height: 0;
|
|
41
|
+
height: auto;
|
|
42
|
+
font-weight: var(--font-weight-medium);
|
|
43
|
+
gap: var(--Size-3);
|
|
44
|
+
font-size: var(--font-size-s);
|
|
45
|
+
cursor: pointer;
|
|
46
|
+
opacity: 0;
|
|
47
|
+
padding: 0 var(--Size-3) 0 var(--Size-8);
|
|
48
|
+
transition:
|
|
49
|
+
max-height 0.3s ease-out,
|
|
50
|
+
opacity 0.3s ease-out,
|
|
51
|
+
padding 0.3s ease-out;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.sidebar-sub-item.sidebar-expanded {
|
|
55
|
+
max-height: 200px;
|
|
56
|
+
opacity: 1;
|
|
57
|
+
padding: var(--Size-3) var(--Size-3) var(--Size-3) var(--Size-8);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.sidebar-sub-item-default {
|
|
61
|
+
color: var(--Gray-Gray-500);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.sidebar-sub-item-active {
|
|
65
|
+
color: var(--Primary-Primary-500);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.space-between {
|
|
69
|
+
justify-content: space-between;
|
|
70
|
+
}
|