@lifecorner/angular-ui-kit 3.4.1 → 3.5.1
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 +12 -2
- package/fesm2022/lifecorner-angular-ui-kit-accordion.mjs +454 -0
- package/fesm2022/lifecorner-angular-ui-kit-accordion.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-alert.mjs +297 -0
- package/fesm2022/lifecorner-angular-ui-kit-alert.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-app-shell.mjs +190 -0
- package/fesm2022/lifecorner-angular-ui-kit-app-shell.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-area-chart.mjs +446 -0
- package/fesm2022/lifecorner-angular-ui-kit-area-chart.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-avatar-group.mjs +158 -0
- package/fesm2022/lifecorner-angular-ui-kit-avatar-group.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-avatar.mjs +216 -0
- package/fesm2022/lifecorner-angular-ui-kit-avatar.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-badge.mjs +121 -0
- package/fesm2022/lifecorner-angular-ui-kit-badge.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-bar-chart.mjs +360 -0
- package/fesm2022/lifecorner-angular-ui-kit-bar-chart.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-bottom-nav.mjs +344 -0
- package/fesm2022/lifecorner-angular-ui-kit-bottom-nav.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-breadcrumbs.mjs +191 -0
- package/fesm2022/lifecorner-angular-ui-kit-breadcrumbs.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-button.mjs +423 -0
- package/fesm2022/lifecorner-angular-ui-kit-button.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-calendar.mjs +368 -0
- package/fesm2022/lifecorner-angular-ui-kit-calendar.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-callout.mjs +203 -0
- package/fesm2022/lifecorner-angular-ui-kit-callout.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-card.mjs +323 -0
- package/fesm2022/lifecorner-angular-ui-kit-card.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-chat.mjs +790 -0
- package/fesm2022/lifecorner-angular-ui-kit-chat.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-checkbox.mjs +325 -0
- package/fesm2022/lifecorner-angular-ui-kit-checkbox.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-chip.mjs +214 -0
- package/fesm2022/lifecorner-angular-ui-kit-chip.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-choice-prompt.mjs +375 -0
- package/fesm2022/lifecorner-angular-ui-kit-choice-prompt.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-code-block.mjs +518 -0
- package/fesm2022/lifecorner-angular-ui-kit-code-block.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-color-picker.mjs +278 -0
- package/fesm2022/lifecorner-angular-ui-kit-color-picker.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-combobox.mjs +688 -0
- package/fesm2022/lifecorner-angular-ui-kit-combobox.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-confirm-dialog.mjs +494 -0
- package/fesm2022/lifecorner-angular-ui-kit-confirm-dialog.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-container.mjs +103 -0
- package/fesm2022/lifecorner-angular-ui-kit-container.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-copy-field.mjs +308 -0
- package/fesm2022/lifecorner-angular-ui-kit-copy-field.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-date-range-picker.mjs +466 -0
- package/fesm2022/lifecorner-angular-ui-kit-date-range-picker.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-datepicker.mjs +810 -0
- package/fesm2022/lifecorner-angular-ui-kit-datepicker.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-dependency-viewer.mjs +1761 -0
- package/fesm2022/lifecorner-angular-ui-kit-dependency-viewer.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-description-list.mjs +165 -0
- package/fesm2022/lifecorner-angular-ui-kit-description-list.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-diff-viewer.mjs +356 -0
- package/fesm2022/lifecorner-angular-ui-kit-diff-viewer.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-divider.mjs +119 -0
- package/fesm2022/lifecorner-angular-ui-kit-divider.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-document-viewer.mjs +762 -0
- package/fesm2022/lifecorner-angular-ui-kit-document-viewer.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-donut-chart.mjs +255 -0
- package/fesm2022/lifecorner-angular-ui-kit-donut-chart.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-drawer.mjs +308 -0
- package/fesm2022/lifecorner-angular-ui-kit-drawer.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-email-input.mjs +519 -0
- package/fesm2022/lifecorner-angular-ui-kit-email-input.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-empty-state.mjs +143 -0
- package/fesm2022/lifecorner-angular-ui-kit-empty-state.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-error-display.mjs +306 -0
- package/fesm2022/lifecorner-angular-ui-kit-error-display.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-field-group.mjs +154 -0
- package/fesm2022/lifecorner-angular-ui-kit-field-group.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-file-upload.mjs +281 -0
- package/fesm2022/lifecorner-angular-ui-kit-file-upload.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-filter-bar.mjs +258 -0
- package/fesm2022/lifecorner-angular-ui-kit-filter-bar.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-footer.mjs +200 -0
- package/fesm2022/lifecorner-angular-ui-kit-footer.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-funnel-chart.mjs +292 -0
- package/fesm2022/lifecorner-angular-ui-kit-funnel-chart.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-gallery.mjs +563 -0
- package/fesm2022/lifecorner-angular-ui-kit-gallery.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-gantt-chart.mjs +314 -0
- package/fesm2022/lifecorner-angular-ui-kit-gantt-chart.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-gauge.mjs +265 -0
- package/fesm2022/lifecorner-angular-ui-kit-gauge.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-header.mjs +955 -0
- package/fesm2022/lifecorner-angular-ui-kit-header.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-heatmap.mjs +305 -0
- package/fesm2022/lifecorner-angular-ui-kit-heatmap.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-hero.mjs +168 -0
- package/fesm2022/lifecorner-angular-ui-kit-hero.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-icon-names.mjs +9 -0
- package/fesm2022/lifecorner-angular-ui-kit-icon-names.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-icon.mjs +1026 -0
- package/fesm2022/lifecorner-angular-ui-kit-icon.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-input.mjs +595 -0
- package/fesm2022/lifecorner-angular-ui-kit-input.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-internal-chart.mjs +105 -0
- package/fesm2022/lifecorner-angular-ui-kit-internal-chart.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-internal-overlay.mjs +50 -0
- package/fesm2022/lifecorner-angular-ui-kit-internal-overlay.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-internal-url.mjs +22 -0
- package/fesm2022/lifecorner-angular-ui-kit-internal-url.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-kanban-board.mjs +319 -0
- package/fesm2022/lifecorner-angular-ui-kit-kanban-board.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-line-chart.mjs +413 -0
- package/fesm2022/lifecorner-angular-ui-kit-line-chart.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-list.mjs +338 -0
- package/fesm2022/lifecorner-angular-ui-kit-list.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-log-viewer.mjs +813 -0
- package/fesm2022/lifecorner-angular-ui-kit-log-viewer.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-logo.mjs +226 -0
- package/fesm2022/lifecorner-angular-ui-kit-logo.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-markdown.mjs +756 -0
- package/fesm2022/lifecorner-angular-ui-kit-markdown.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-menu.mjs +321 -0
- package/fesm2022/lifecorner-angular-ui-kit-menu.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-modal.mjs +329 -0
- package/fesm2022/lifecorner-angular-ui-kit-modal.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-models.mjs +0 -0
- package/fesm2022/lifecorner-angular-ui-kit-next-step-card.mjs +419 -0
- package/fesm2022/lifecorner-angular-ui-kit-next-step-card.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-notification-center.mjs +644 -0
- package/fesm2022/lifecorner-angular-ui-kit-notification-center.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-number-input.mjs +401 -0
- package/fesm2022/lifecorner-angular-ui-kit-number-input.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-page-header.mjs +266 -0
- package/fesm2022/lifecorner-angular-ui-kit-page-header.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-page-layout.mjs +127 -0
- package/fesm2022/lifecorner-angular-ui-kit-page-layout.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-pagination.mjs +343 -0
- package/fesm2022/lifecorner-angular-ui-kit-pagination.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-password-input.mjs +696 -0
- package/fesm2022/lifecorner-angular-ui-kit-password-input.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-pie-chart.mjs +162 -0
- package/fesm2022/lifecorner-angular-ui-kit-pie-chart.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-pipeline.mjs +159 -0
- package/fesm2022/lifecorner-angular-ui-kit-pipeline.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-popover.mjs +190 -0
- package/fesm2022/lifecorner-angular-ui-kit-popover.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-progress-bar.mjs +190 -0
- package/fesm2022/lifecorner-angular-ui-kit-progress-bar.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-progress-ring.mjs +175 -0
- package/fesm2022/lifecorner-angular-ui-kit-progress-ring.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-provider-button.mjs +255 -0
- package/fesm2022/lifecorner-angular-ui-kit-provider-button.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-radar-chart.mjs +309 -0
- package/fesm2022/lifecorner-angular-ui-kit-radar-chart.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-radio.mjs +708 -0
- package/fesm2022/lifecorner-angular-ui-kit-radio.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-rating.mjs +327 -0
- package/fesm2022/lifecorner-angular-ui-kit-rating.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-rich-text-editor.mjs +718 -0
- package/fesm2022/lifecorner-angular-ui-kit-rich-text-editor.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-scatter-plot.mjs +415 -0
- package/fesm2022/lifecorner-angular-ui-kit-scatter-plot.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-search-input.mjs +290 -0
- package/fesm2022/lifecorner-angular-ui-kit-search-input.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-section.mjs +127 -0
- package/fesm2022/lifecorner-angular-ui-kit-section.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-select.mjs +650 -0
- package/fesm2022/lifecorner-angular-ui-kit-select.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-sidenav.mjs +691 -0
- package/fesm2022/lifecorner-angular-ui-kit-sidenav.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-skeleton.mjs +144 -0
- package/fesm2022/lifecorner-angular-ui-kit-skeleton.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-slider.mjs +204 -0
- package/fesm2022/lifecorner-angular-ui-kit-slider.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-spacer.mjs +73 -0
- package/fesm2022/lifecorner-angular-ui-kit-spacer.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-sparkline.mjs +318 -0
- package/fesm2022/lifecorner-angular-ui-kit-sparkline.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-spinner.mjs +95 -0
- package/fesm2022/lifecorner-angular-ui-kit-spinner.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-split-pane.mjs +298 -0
- package/fesm2022/lifecorner-angular-ui-kit-split-pane.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-stack.mjs +162 -0
- package/fesm2022/lifecorner-angular-ui-kit-stack.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-stacked-bar-chart.mjs +412 -0
- package/fesm2022/lifecorner-angular-ui-kit-stacked-bar-chart.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-stage-list.mjs +186 -0
- package/fesm2022/lifecorner-angular-ui-kit-stage-list.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-stat-trend.mjs +224 -0
- package/fesm2022/lifecorner-angular-ui-kit-stat-trend.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-status-dot.mjs +122 -0
- package/fesm2022/lifecorner-angular-ui-kit-status-dot.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-stepper.mjs +209 -0
- package/fesm2022/lifecorner-angular-ui-kit-stepper.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-switch.mjs +249 -0
- package/fesm2022/lifecorner-angular-ui-kit-switch.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-table.mjs +1434 -0
- package/fesm2022/lifecorner-angular-ui-kit-table.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-tabs.mjs +407 -0
- package/fesm2022/lifecorner-angular-ui-kit-tabs.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-tag-input.mjs +380 -0
- package/fesm2022/lifecorner-angular-ui-kit-tag-input.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-textarea.mjs +440 -0
- package/fesm2022/lifecorner-angular-ui-kit-textarea.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-theme.mjs +145 -0
- package/fesm2022/lifecorner-angular-ui-kit-theme.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-timeline.mjs +262 -0
- package/fesm2022/lifecorner-angular-ui-kit-timeline.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-toast.mjs +352 -0
- package/fesm2022/lifecorner-angular-ui-kit-toast.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-toggle-group.mjs +215 -0
- package/fesm2022/lifecorner-angular-ui-kit-toggle-group.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-tokens.mjs +134 -0
- package/fesm2022/lifecorner-angular-ui-kit-tokens.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-toolbar.mjs +225 -0
- package/fesm2022/lifecorner-angular-ui-kit-toolbar.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-tooltip.mjs +386 -0
- package/fesm2022/lifecorner-angular-ui-kit-tooltip.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-tree-view.mjs +509 -0
- package/fesm2022/lifecorner-angular-ui-kit-tree-view.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-typography.mjs +209 -0
- package/fesm2022/lifecorner-angular-ui-kit-typography.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-verification-code-input.mjs +365 -0
- package/fesm2022/lifecorner-angular-ui-kit-verification-code-input.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit-waterfall-chart.mjs +371 -0
- package/fesm2022/lifecorner-angular-ui-kit-waterfall-chart.mjs.map +1 -0
- package/fesm2022/lifecorner-angular-ui-kit.mjs +109 -38925
- package/package.json +449 -1
- package/types/lifecorner-angular-ui-kit-accordion.d.ts +239 -0
- package/types/lifecorner-angular-ui-kit-alert.d.ts +189 -0
- package/types/lifecorner-angular-ui-kit-app-shell.d.ts +148 -0
- package/types/lifecorner-angular-ui-kit-area-chart.d.ts +180 -0
- package/types/lifecorner-angular-ui-kit-avatar-group.d.ts +62 -0
- package/types/lifecorner-angular-ui-kit-avatar.d.ts +131 -0
- package/types/lifecorner-angular-ui-kit-badge.d.ts +59 -0
- package/types/lifecorner-angular-ui-kit-bar-chart.d.ts +157 -0
- package/types/lifecorner-angular-ui-kit-bottom-nav.d.ts +184 -0
- package/types/lifecorner-angular-ui-kit-breadcrumbs.d.ts +55 -0
- package/types/lifecorner-angular-ui-kit-button.d.ts +181 -0
- package/types/lifecorner-angular-ui-kit-calendar.d.ts +136 -0
- package/types/lifecorner-angular-ui-kit-callout.d.ts +77 -0
- package/types/lifecorner-angular-ui-kit-card.d.ts +213 -0
- package/types/lifecorner-angular-ui-kit-chat.d.ts +379 -0
- package/types/lifecorner-angular-ui-kit-checkbox.d.ts +116 -0
- package/types/lifecorner-angular-ui-kit-chip.d.ts +104 -0
- package/types/lifecorner-angular-ui-kit-choice-prompt.d.ts +186 -0
- package/types/lifecorner-angular-ui-kit-code-block.d.ts +85 -0
- package/types/lifecorner-angular-ui-kit-color-picker.d.ts +88 -0
- package/types/lifecorner-angular-ui-kit-combobox.d.ts +222 -0
- package/types/lifecorner-angular-ui-kit-confirm-dialog.d.ts +211 -0
- package/types/lifecorner-angular-ui-kit-container.d.ts +47 -0
- package/types/lifecorner-angular-ui-kit-copy-field.d.ts +89 -0
- package/types/lifecorner-angular-ui-kit-date-range-picker.d.ts +126 -0
- package/types/lifecorner-angular-ui-kit-datepicker.d.ts +363 -0
- package/types/lifecorner-angular-ui-kit-dependency-viewer.d.ts +568 -0
- package/types/lifecorner-angular-ui-kit-description-list.d.ts +137 -0
- package/types/lifecorner-angular-ui-kit-diff-viewer.d.ts +93 -0
- package/types/lifecorner-angular-ui-kit-divider.d.ts +66 -0
- package/types/lifecorner-angular-ui-kit-document-viewer.d.ts +256 -0
- package/types/lifecorner-angular-ui-kit-donut-chart.d.ts +92 -0
- package/types/lifecorner-angular-ui-kit-drawer.d.ts +124 -0
- package/types/lifecorner-angular-ui-kit-email-input.d.ts +292 -0
- package/types/lifecorner-angular-ui-kit-empty-state.d.ts +81 -0
- package/types/lifecorner-angular-ui-kit-error-display.d.ts +157 -0
- package/types/lifecorner-angular-ui-kit-field-group.d.ts +69 -0
- package/types/lifecorner-angular-ui-kit-file-upload.d.ts +122 -0
- package/types/lifecorner-angular-ui-kit-filter-bar.d.ts +116 -0
- package/types/lifecorner-angular-ui-kit-footer.d.ts +97 -0
- package/types/lifecorner-angular-ui-kit-funnel-chart.d.ts +97 -0
- package/types/lifecorner-angular-ui-kit-gallery.d.ts +240 -0
- package/types/lifecorner-angular-ui-kit-gantt-chart.d.ts +133 -0
- package/types/lifecorner-angular-ui-kit-gauge.d.ts +94 -0
- package/types/lifecorner-angular-ui-kit-header.d.ts +496 -0
- package/types/lifecorner-angular-ui-kit-heatmap.d.ts +126 -0
- package/types/lifecorner-angular-ui-kit-hero.d.ts +121 -0
- package/types/lifecorner-angular-ui-kit-icon-names.d.ts +21 -0
- package/types/lifecorner-angular-ui-kit-icon.d.ts +260 -0
- package/types/lifecorner-angular-ui-kit-input.d.ts +346 -0
- package/types/lifecorner-angular-ui-kit-internal-chart.d.ts +86 -0
- package/types/lifecorner-angular-ui-kit-internal-overlay.d.ts +31 -0
- package/types/lifecorner-angular-ui-kit-internal-url.d.ts +22 -0
- package/types/lifecorner-angular-ui-kit-kanban-board.d.ts +111 -0
- package/types/lifecorner-angular-ui-kit-line-chart.d.ts +186 -0
- package/types/lifecorner-angular-ui-kit-list.d.ts +215 -0
- package/types/lifecorner-angular-ui-kit-log-viewer.d.ts +355 -0
- package/types/lifecorner-angular-ui-kit-logo.d.ts +182 -0
- package/types/lifecorner-angular-ui-kit-markdown.d.ts +278 -0
- package/types/lifecorner-angular-ui-kit-menu.d.ts +152 -0
- package/types/lifecorner-angular-ui-kit-modal.d.ts +207 -0
- package/types/lifecorner-angular-ui-kit-models.d.ts +62 -0
- package/types/lifecorner-angular-ui-kit-next-step-card.d.ts +262 -0
- package/types/lifecorner-angular-ui-kit-notification-center.d.ts +237 -0
- package/types/lifecorner-angular-ui-kit-number-input.d.ts +126 -0
- package/types/lifecorner-angular-ui-kit-page-header.d.ts +178 -0
- package/types/lifecorner-angular-ui-kit-page-layout.d.ts +61 -0
- package/types/lifecorner-angular-ui-kit-pagination.d.ts +141 -0
- package/types/lifecorner-angular-ui-kit-password-input.d.ts +361 -0
- package/types/lifecorner-angular-ui-kit-pie-chart.d.ts +58 -0
- package/types/lifecorner-angular-ui-kit-pipeline.d.ts +89 -0
- package/types/lifecorner-angular-ui-kit-popover.d.ts +104 -0
- package/types/lifecorner-angular-ui-kit-progress-bar.d.ts +116 -0
- package/types/lifecorner-angular-ui-kit-progress-ring.d.ts +67 -0
- package/types/lifecorner-angular-ui-kit-provider-button.d.ts +137 -0
- package/types/lifecorner-angular-ui-kit-radar-chart.d.ts +113 -0
- package/types/lifecorner-angular-ui-kit-radio.d.ts +297 -0
- package/types/lifecorner-angular-ui-kit-rating.d.ts +115 -0
- package/types/lifecorner-angular-ui-kit-rich-text-editor.d.ts +226 -0
- package/types/lifecorner-angular-ui-kit-scatter-plot.d.ts +190 -0
- package/types/lifecorner-angular-ui-kit-search-input.d.ts +137 -0
- package/types/lifecorner-angular-ui-kit-section.d.ts +34 -0
- package/types/lifecorner-angular-ui-kit-select.d.ts +274 -0
- package/types/lifecorner-angular-ui-kit-sidenav.d.ts +368 -0
- package/types/lifecorner-angular-ui-kit-skeleton.d.ts +61 -0
- package/types/lifecorner-angular-ui-kit-slider.d.ts +79 -0
- package/types/lifecorner-angular-ui-kit-spacer.d.ts +27 -0
- package/types/lifecorner-angular-ui-kit-sparkline.d.ts +113 -0
- package/types/lifecorner-angular-ui-kit-spinner.d.ts +50 -0
- package/types/lifecorner-angular-ui-kit-split-pane.d.ts +131 -0
- package/types/lifecorner-angular-ui-kit-stack.d.ts +49 -0
- package/types/lifecorner-angular-ui-kit-stacked-bar-chart.d.ts +171 -0
- package/types/lifecorner-angular-ui-kit-stage-list.d.ts +69 -0
- package/types/lifecorner-angular-ui-kit-stat-trend.d.ts +62 -0
- package/types/lifecorner-angular-ui-kit-status-dot.d.ts +62 -0
- package/types/lifecorner-angular-ui-kit-stepper.d.ts +113 -0
- package/types/lifecorner-angular-ui-kit-switch.d.ts +141 -0
- package/types/lifecorner-angular-ui-kit-table.d.ts +632 -0
- package/types/lifecorner-angular-ui-kit-tabs.d.ts +196 -0
- package/types/lifecorner-angular-ui-kit-tag-input.d.ts +123 -0
- package/types/lifecorner-angular-ui-kit-textarea.d.ts +225 -0
- package/types/lifecorner-angular-ui-kit-theme.d.ts +91 -0
- package/types/lifecorner-angular-ui-kit-timeline.d.ts +162 -0
- package/types/lifecorner-angular-ui-kit-toast.d.ts +204 -0
- package/types/lifecorner-angular-ui-kit-toggle-group.d.ts +100 -0
- package/types/lifecorner-angular-ui-kit-tokens.d.ts +134 -0
- package/types/lifecorner-angular-ui-kit-toolbar.d.ts +120 -0
- package/types/lifecorner-angular-ui-kit-tooltip.d.ts +120 -0
- package/types/lifecorner-angular-ui-kit-tree-view.d.ts +231 -0
- package/types/lifecorner-angular-ui-kit-typography.d.ts +126 -0
- package/types/lifecorner-angular-ui-kit-verification-code-input.d.ts +187 -0
- package/types/lifecorner-angular-ui-kit-waterfall-chart.d.ts +163 -0
- package/types/lifecorner-angular-ui-kit.d.ts +109 -17401
- package/fesm2022/lifecorner-angular-ui-kit.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecorner-angular-ui-kit-stage-list.mjs","names":[],"sources":["../../../../libs/angular-ui-kit/src/lib/stage-list/stage-list.component.ts","../../../../libs/angular-ui-kit/src/lib/stage-list/stage-list.component.html"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n} from '@angular/core';\n\nexport interface StageItem {\n /** Stage name shown as the row label. */\n label: string;\n /** Numeric value; drives the bar width and the right-aligned count. */\n value: number;\n /** Optional bar/dot color (any CSS color). Falls back to the primary token. */\n color?: string;\n /** Optional secondary text shown under the label (e.g. a hint). */\n hint?: string;\n /** Optional opaque payload echoed back in `stageClick`. */\n id?: string;\n}\n\nexport type StageListSize = 'sm' | 'md';\n\n@Component({\n selector: 'lc-stage-list',\n standalone: true,\n templateUrl: './stage-list.component.html',\n styleUrls: ['./stage-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StageListComponent {\n readonly stages = input.required<StageItem[]>();\n readonly max = input<number | null>(null);\n readonly showValue = input<boolean>(true);\n readonly showBar = input<boolean>(true);\n readonly size = input<StageListSize>('md');\n readonly clickable = input<boolean>(false);\n readonly emptyText = input<string>('');\n\n readonly stageClick = output<StageItem>();\n\n protected readonly isEmpty = computed(() => this.stages().length === 0);\n\n protected readonly resolvedMax = computed(() => {\n const explicitMax = this.max();\n if (typeof explicitMax === 'number' && Number.isFinite(explicitMax) && explicitMax > 0) {\n return explicitMax;\n }\n\n const numericValues = this.stages()\n .map((stage) => (Number.isFinite(stage.value) ? stage.value : 0));\n\n return Math.max(1, ...numericValues);\n });\n\n protected resolveColor(stage: StageItem): string {\n if (typeof stage.color === 'string' && stage.color.trim()) {\n return stage.color;\n }\n\n return 'var(--lc-color-primary-500, var(--color-primary-500))';\n }\n\n protected fillWidth(stage: StageItem): string {\n const value = Number.isFinite(stage.value) ? stage.value : 0;\n if (value <= 0) {\n return '0%';\n }\n\n const maxValue = this.resolvedMax();\n const safeMax = maxValue > 0 ? maxValue : 1;\n const pct = Math.round((value / safeMax) * 100);\n const clampedPct = Math.max(0, Math.min(100, pct));\n\n return `max(2px, ${clampedPct}%)`;\n }\n\n protected onStageClick(stage: StageItem): void {\n if (!this.clickable()) {\n return;\n }\n\n this.stageClick.emit(stage);\n }\n}\n","@if (isEmpty()) {\n @if (emptyText()) {\n <p class=\"lc-stage-list__empty\">{{ emptyText() }}</p>\n }\n} @else {\n <div class=\"lc-stage-list\" [class.lc-stage-list--sm]=\"size() === 'sm'\" [class.lc-stage-list--md]=\"size() === 'md'\" role=\"list\">\n @for (stage of stages(); track stage.id || stage.label || $index) {\n <div class=\"lc-stage-list__row\" role=\"listitem\" [style.--lc-stage-color]=\"resolveColor(stage)\">\n @if (clickable()) {\n <button type=\"button\" class=\"lc-stage-list__interactive\" (click)=\"onStageClick(stage)\">\n <div class=\"lc-stage-list__head\">\n <span class=\"lc-stage-list__dot\" aria-hidden=\"true\"></span>\n <div class=\"lc-stage-list__label-wrap\">\n <span class=\"lc-stage-list__label\">{{ stage.label }}</span>\n @if (stage.hint) {\n <span class=\"lc-stage-list__hint\">{{ stage.hint }}</span>\n }\n </div>\n @if (showValue()) {\n <span class=\"lc-stage-list__value\">{{ stage.value }}</span>\n }\n </div>\n @if (showBar()) {\n <div class=\"lc-stage-list__track\" aria-hidden=\"true\">\n <div class=\"lc-stage-list__fill\" [style.width]=\"fillWidth(stage)\"></div>\n </div>\n }\n </button>\n } @else {\n <div class=\"lc-stage-list__content\">\n <div class=\"lc-stage-list__head\">\n <span class=\"lc-stage-list__dot\" aria-hidden=\"true\"></span>\n <div class=\"lc-stage-list__label-wrap\">\n <span class=\"lc-stage-list__label\">{{ stage.label }}</span>\n @if (stage.hint) {\n <span class=\"lc-stage-list__hint\">{{ stage.hint }}</span>\n }\n </div>\n @if (showValue()) {\n <span class=\"lc-stage-list__value\">{{ stage.value }}</span>\n }\n </div>\n @if (showBar()) {\n <div class=\"lc-stage-list__track\" aria-hidden=\"true\">\n <div class=\"lc-stage-list__fill\" [style.width]=\"fillWidth(stage)\"></div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import { ChangeDetectionStrategy, Component, computed, input } from "@angular/core";
|
|
3
|
+
import { SparklineComponent } from "@lifecorner/angular-ui-kit/sparkline";
|
|
4
|
+
import { IconComponent } from "@lifecorner/angular-ui-kit/icon";
|
|
5
|
+
var StatTrendComponent = class StatTrendComponent {
|
|
6
|
+
label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
|
|
7
|
+
value = input.required(...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
|
|
8
|
+
change = input("", ...ngDevMode ? [{ debugName: "change" }] : /* istanbul ignore next */ []);
|
|
9
|
+
direction = input(void 0, ...ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []);
|
|
10
|
+
sparklineData = input([], ...ngDevMode ? [{ debugName: "sparklineData" }] : /* istanbul ignore next */ []);
|
|
11
|
+
sparklineColor = input(void 0, ...ngDevMode ? [{ debugName: "sparklineColor" }] : /* istanbul ignore next */ []);
|
|
12
|
+
icon = input("", ...ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []);
|
|
13
|
+
resolvedDirection = computed(() => {
|
|
14
|
+
const dir = this.direction();
|
|
15
|
+
if (dir) return dir;
|
|
16
|
+
const c = this.change();
|
|
17
|
+
if (c.startsWith("+") || c.startsWith("↑")) return "up";
|
|
18
|
+
if (c.startsWith("-") || c.startsWith("↓")) return "down";
|
|
19
|
+
return "neutral";
|
|
20
|
+
}, ...ngDevMode ? [{ debugName: "resolvedDirection" }] : /* istanbul ignore next */ []);
|
|
21
|
+
trendColorClass = computed(() => {
|
|
22
|
+
return {
|
|
23
|
+
up: "lc-stat-trend__change--up",
|
|
24
|
+
down: "lc-stat-trend__change--down",
|
|
25
|
+
neutral: "lc-stat-trend__change--neutral"
|
|
26
|
+
}[this.resolvedDirection()];
|
|
27
|
+
}, ...ngDevMode ? [{ debugName: "trendColorClass" }] : /* istanbul ignore next */ []);
|
|
28
|
+
resolvedSparklineColor = computed(() => {
|
|
29
|
+
const c = this.sparklineColor();
|
|
30
|
+
if (c) return c;
|
|
31
|
+
return {
|
|
32
|
+
up: "success",
|
|
33
|
+
down: "error",
|
|
34
|
+
neutral: "info"
|
|
35
|
+
}[this.resolvedDirection()];
|
|
36
|
+
}, ...ngDevMode ? [{ debugName: "resolvedSparklineColor" }] : /* istanbul ignore next */ []);
|
|
37
|
+
trendIcon = computed(() => {
|
|
38
|
+
return {
|
|
39
|
+
up: "↑",
|
|
40
|
+
down: "↓",
|
|
41
|
+
neutral: "→"
|
|
42
|
+
}[this.resolvedDirection()];
|
|
43
|
+
}, ...ngDevMode ? [{ debugName: "trendIcon" }] : /* istanbul ignore next */ []);
|
|
44
|
+
hasSparkline = computed(() => this.sparklineData().length >= 2, ...ngDevMode ? [{ debugName: "hasSparkline" }] : /* istanbul ignore next */ []);
|
|
45
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
46
|
+
minVersion: "12.0.0",
|
|
47
|
+
version: "22.2.2",
|
|
48
|
+
ngImport: i0,
|
|
49
|
+
type: StatTrendComponent,
|
|
50
|
+
deps: [],
|
|
51
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
52
|
+
});
|
|
53
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
54
|
+
minVersion: "17.0.0",
|
|
55
|
+
version: "22.2.2",
|
|
56
|
+
type: StatTrendComponent,
|
|
57
|
+
isStandalone: true,
|
|
58
|
+
selector: "lc-stat-trend",
|
|
59
|
+
inputs: {
|
|
60
|
+
label: {
|
|
61
|
+
classPropertyName: "label",
|
|
62
|
+
publicName: "label",
|
|
63
|
+
isSignal: true,
|
|
64
|
+
isRequired: false,
|
|
65
|
+
transformFunction: null
|
|
66
|
+
},
|
|
67
|
+
value: {
|
|
68
|
+
classPropertyName: "value",
|
|
69
|
+
publicName: "value",
|
|
70
|
+
isSignal: true,
|
|
71
|
+
isRequired: true,
|
|
72
|
+
transformFunction: null
|
|
73
|
+
},
|
|
74
|
+
change: {
|
|
75
|
+
classPropertyName: "change",
|
|
76
|
+
publicName: "change",
|
|
77
|
+
isSignal: true,
|
|
78
|
+
isRequired: false,
|
|
79
|
+
transformFunction: null
|
|
80
|
+
},
|
|
81
|
+
direction: {
|
|
82
|
+
classPropertyName: "direction",
|
|
83
|
+
publicName: "direction",
|
|
84
|
+
isSignal: true,
|
|
85
|
+
isRequired: false,
|
|
86
|
+
transformFunction: null
|
|
87
|
+
},
|
|
88
|
+
sparklineData: {
|
|
89
|
+
classPropertyName: "sparklineData",
|
|
90
|
+
publicName: "sparklineData",
|
|
91
|
+
isSignal: true,
|
|
92
|
+
isRequired: false,
|
|
93
|
+
transformFunction: null
|
|
94
|
+
},
|
|
95
|
+
sparklineColor: {
|
|
96
|
+
classPropertyName: "sparklineColor",
|
|
97
|
+
publicName: "sparklineColor",
|
|
98
|
+
isSignal: true,
|
|
99
|
+
isRequired: false,
|
|
100
|
+
transformFunction: null
|
|
101
|
+
},
|
|
102
|
+
icon: {
|
|
103
|
+
classPropertyName: "icon",
|
|
104
|
+
publicName: "icon",
|
|
105
|
+
isSignal: true,
|
|
106
|
+
isRequired: false,
|
|
107
|
+
transformFunction: null
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
ngImport: i0,
|
|
111
|
+
template: "<div class=\"lc-stat-trend\">\n <div class=\"lc-stat-trend__header\">\n @if (label()) {\n <span class=\"lc-stat-trend__label\">{{ label() }}</span>\n }\n @if (icon()) {\n <lc-icon [name]=\"icon()\" size=\"sm\" class=\"lc-stat-trend__header-icon\" [decorative]=\"true\" />\n }\n </div>\n\n <div class=\"lc-stat-trend__row\">\n <span class=\"lc-stat-trend__value\">{{ value() }}</span>\n\n @if (change()) {\n <span class=\"lc-stat-trend__change\" [class]=\"trendColorClass()\">\n <span class=\"lc-stat-trend__icon\">{{ trendIcon() }}</span>\n {{ change() }}\n </span>\n }\n </div>\n\n @if (hasSparkline()) {\n <lc-sparkline\n [data]=\"sparklineData()\"\n [color]=\"resolvedSparklineColor()\"\n [width]=\"120\"\n [height]=\"28\"\n [filled]=\"true\"\n [strokeWidth]=\"1.5\"\n ></lc-sparkline>\n }\n</div>\n",
|
|
112
|
+
styles: [".lc-stat-trend{display:inline-flex;flex-direction:column;gap:.25rem}.lc-stat-trend__header{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.lc-stat-trend__header-icon{color:var(--color-text-tertiary);flex-shrink:0}.lc-stat-trend__label{font-size:var(--typography-font-size-xs, .75rem);color:var(--color-text-tertiary);font-weight:500;text-transform:uppercase;letter-spacing:.05em}.lc-stat-trend__row{display:flex;align-items:baseline;gap:.5rem}.lc-stat-trend__value{font-size:var(--typography-font-size-2xl, 1.5rem);font-weight:700;color:var(--color-text-primary);line-height:1.2}.lc-stat-trend__change{display:inline-flex;align-items:center;gap:.125rem;font-size:var(--typography-font-size-sm, .875rem);font-weight:600;border-radius:var(--border-radius-full);padding:.0625rem .5rem}.lc-stat-trend__change--up{color:var(--color-success);background-color:#8ea4752e}.lc-stat-trend__change--down{color:var(--color-error);background-color:#9d0e0e2e}.lc-stat-trend__change--neutral{color:var(--color-text-secondary);background-color:var(--color-surface-hover)}.lc-stat-trend__icon{font-size:.75em}\n"],
|
|
113
|
+
dependencies: [{
|
|
114
|
+
kind: "component",
|
|
115
|
+
type: SparklineComponent,
|
|
116
|
+
selector: "lc-sparkline",
|
|
117
|
+
inputs: [
|
|
118
|
+
"data",
|
|
119
|
+
"color",
|
|
120
|
+
"width",
|
|
121
|
+
"height",
|
|
122
|
+
"strokeWidth",
|
|
123
|
+
"filled",
|
|
124
|
+
"curve",
|
|
125
|
+
"showEndDot",
|
|
126
|
+
"fluid",
|
|
127
|
+
"formatValue",
|
|
128
|
+
"ariaLabel"
|
|
129
|
+
]
|
|
130
|
+
}, {
|
|
131
|
+
kind: "component",
|
|
132
|
+
type: IconComponent,
|
|
133
|
+
selector: "lc-icon",
|
|
134
|
+
inputs: [
|
|
135
|
+
"name",
|
|
136
|
+
"variant",
|
|
137
|
+
"size",
|
|
138
|
+
"color",
|
|
139
|
+
"ariaLabel",
|
|
140
|
+
"decorative",
|
|
141
|
+
"strict"
|
|
142
|
+
]
|
|
143
|
+
}],
|
|
144
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
145
|
+
});
|
|
146
|
+
};
|
|
147
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
148
|
+
minVersion: "12.0.0",
|
|
149
|
+
version: "22.2.2",
|
|
150
|
+
ngImport: i0,
|
|
151
|
+
type: StatTrendComponent,
|
|
152
|
+
decorators: [{
|
|
153
|
+
type: Component,
|
|
154
|
+
args: [{
|
|
155
|
+
selector: "lc-stat-trend",
|
|
156
|
+
standalone: true,
|
|
157
|
+
imports: [SparklineComponent, IconComponent],
|
|
158
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
159
|
+
template: "<div class=\"lc-stat-trend\">\n <div class=\"lc-stat-trend__header\">\n @if (label()) {\n <span class=\"lc-stat-trend__label\">{{ label() }}</span>\n }\n @if (icon()) {\n <lc-icon [name]=\"icon()\" size=\"sm\" class=\"lc-stat-trend__header-icon\" [decorative]=\"true\" />\n }\n </div>\n\n <div class=\"lc-stat-trend__row\">\n <span class=\"lc-stat-trend__value\">{{ value() }}</span>\n\n @if (change()) {\n <span class=\"lc-stat-trend__change\" [class]=\"trendColorClass()\">\n <span class=\"lc-stat-trend__icon\">{{ trendIcon() }}</span>\n {{ change() }}\n </span>\n }\n </div>\n\n @if (hasSparkline()) {\n <lc-sparkline\n [data]=\"sparklineData()\"\n [color]=\"resolvedSparklineColor()\"\n [width]=\"120\"\n [height]=\"28\"\n [filled]=\"true\"\n [strokeWidth]=\"1.5\"\n ></lc-sparkline>\n }\n</div>\n",
|
|
160
|
+
styles: [".lc-stat-trend{display:inline-flex;flex-direction:column;gap:.25rem}.lc-stat-trend__header{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.lc-stat-trend__header-icon{color:var(--color-text-tertiary);flex-shrink:0}.lc-stat-trend__label{font-size:var(--typography-font-size-xs, .75rem);color:var(--color-text-tertiary);font-weight:500;text-transform:uppercase;letter-spacing:.05em}.lc-stat-trend__row{display:flex;align-items:baseline;gap:.5rem}.lc-stat-trend__value{font-size:var(--typography-font-size-2xl, 1.5rem);font-weight:700;color:var(--color-text-primary);line-height:1.2}.lc-stat-trend__change{display:inline-flex;align-items:center;gap:.125rem;font-size:var(--typography-font-size-sm, .875rem);font-weight:600;border-radius:var(--border-radius-full);padding:.0625rem .5rem}.lc-stat-trend__change--up{color:var(--color-success);background-color:#8ea4752e}.lc-stat-trend__change--down{color:var(--color-error);background-color:#9d0e0e2e}.lc-stat-trend__change--neutral{color:var(--color-text-secondary);background-color:var(--color-surface-hover)}.lc-stat-trend__icon{font-size:.75em}\n"]
|
|
161
|
+
}]
|
|
162
|
+
}],
|
|
163
|
+
propDecorators: {
|
|
164
|
+
label: [{
|
|
165
|
+
type: i0.Input,
|
|
166
|
+
args: [{
|
|
167
|
+
isSignal: true,
|
|
168
|
+
alias: "label",
|
|
169
|
+
required: false
|
|
170
|
+
}]
|
|
171
|
+
}],
|
|
172
|
+
value: [{
|
|
173
|
+
type: i0.Input,
|
|
174
|
+
args: [{
|
|
175
|
+
isSignal: true,
|
|
176
|
+
alias: "value",
|
|
177
|
+
required: true
|
|
178
|
+
}]
|
|
179
|
+
}],
|
|
180
|
+
change: [{
|
|
181
|
+
type: i0.Input,
|
|
182
|
+
args: [{
|
|
183
|
+
isSignal: true,
|
|
184
|
+
alias: "change",
|
|
185
|
+
required: false
|
|
186
|
+
}]
|
|
187
|
+
}],
|
|
188
|
+
direction: [{
|
|
189
|
+
type: i0.Input,
|
|
190
|
+
args: [{
|
|
191
|
+
isSignal: true,
|
|
192
|
+
alias: "direction",
|
|
193
|
+
required: false
|
|
194
|
+
}]
|
|
195
|
+
}],
|
|
196
|
+
sparklineData: [{
|
|
197
|
+
type: i0.Input,
|
|
198
|
+
args: [{
|
|
199
|
+
isSignal: true,
|
|
200
|
+
alias: "sparklineData",
|
|
201
|
+
required: false
|
|
202
|
+
}]
|
|
203
|
+
}],
|
|
204
|
+
sparklineColor: [{
|
|
205
|
+
type: i0.Input,
|
|
206
|
+
args: [{
|
|
207
|
+
isSignal: true,
|
|
208
|
+
alias: "sparklineColor",
|
|
209
|
+
required: false
|
|
210
|
+
}]
|
|
211
|
+
}],
|
|
212
|
+
icon: [{
|
|
213
|
+
type: i0.Input,
|
|
214
|
+
args: [{
|
|
215
|
+
isSignal: true,
|
|
216
|
+
alias: "icon",
|
|
217
|
+
required: false
|
|
218
|
+
}]
|
|
219
|
+
}]
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
export { StatTrendComponent };
|
|
223
|
+
|
|
224
|
+
//# sourceMappingURL=lifecorner-angular-ui-kit-stat-trend.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecorner-angular-ui-kit-stat-trend.mjs","names":[],"sources":["../../../../libs/angular-ui-kit/src/lib/stat-trend/stat-trend.component.ts","../../../../libs/angular-ui-kit/src/lib/stat-trend/stat-trend.component.html"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n input,\n computed,\n} from '@angular/core';\nimport { SparklineComponent, SparklineColor } from '@lifecorner/angular-ui-kit/sparkline';\nimport { IconComponent } from '@lifecorner/angular-ui-kit/icon';\n\nexport type StatTrendDirection = 'up' | 'down' | 'neutral';\n\n@Component({\n selector: 'lc-stat-trend',\n standalone: true,\n imports: [SparklineComponent, IconComponent],\n templateUrl: './stat-trend.component.html',\n styleUrls: ['./stat-trend.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n/**\n * Stat trend component for displaying KPI values with change indicators.\n *\n * Features:\n * - Value display with label and optional icon\n * - Change percentage with auto-detected trend direction (up/down/neutral)\n * - Color-coded trend indicator (green for up, red for down)\n * - Optional embedded sparkline chart\n * - Configurable sparkline color theme\n *\n * @example\n * ```html\n * <lc-stat-trend label=\"Revenue\" value=\"$42,350\" change=\"+12.5%\" [sparklineData]=\"data\" />\n * ```\n */\nexport class StatTrendComponent {\n /** Main KPI label. */\n label = input<string>('');\n\n /** Main KPI value to display. */\n value = input.required<string>();\n\n /** Change value text, e.g. \"+12%\" or \"-3.5%\". */\n change = input<string>('');\n\n /** Trend direction for color coding. Auto-detected from change if not set. */\n direction = input<StatTrendDirection | undefined>(undefined);\n\n /** Sparkline data points. If empty, no sparkline is shown. */\n sparklineData = input<number[]>([]);\n\n /** Color of the sparkline. Auto-matched to trend direction if not set. */\n sparklineColor = input<SparklineColor | undefined>(undefined);\n\n /** Optional icon name (Tabler icon). */\n icon = input<string>('');\n\n protected readonly resolvedDirection = computed<StatTrendDirection>(() => {\n const dir = this.direction();\n if (dir) return dir;\n const c = this.change();\n if (c.startsWith('+') || c.startsWith('↑')) return 'up';\n if (c.startsWith('-') || c.startsWith('↓')) return 'down';\n return 'neutral';\n });\n\n protected readonly trendColorClass = computed(() => {\n const map: Record<StatTrendDirection, string> = {\n up: 'lc-stat-trend__change--up',\n down: 'lc-stat-trend__change--down',\n neutral: 'lc-stat-trend__change--neutral',\n };\n return map[this.resolvedDirection()];\n });\n\n protected readonly resolvedSparklineColor = computed<SparklineColor>(() => {\n const c = this.sparklineColor();\n if (c) return c;\n const map: Record<StatTrendDirection, SparklineColor> = {\n up: 'success',\n down: 'error',\n neutral: 'info',\n };\n return map[this.resolvedDirection()];\n });\n\n protected readonly trendIcon = computed(() => {\n const map: Record<StatTrendDirection, string> = {\n up: '↑',\n down: '↓',\n neutral: '→',\n };\n return map[this.resolvedDirection()];\n });\n\n protected readonly hasSparkline = computed(() => this.sparklineData().length >= 2);\n}\n","<div class=\"lc-stat-trend\">\n <div class=\"lc-stat-trend__header\">\n @if (label()) {\n <span class=\"lc-stat-trend__label\">{{ label() }}</span>\n }\n @if (icon()) {\n <lc-icon [name]=\"icon()\" size=\"sm\" class=\"lc-stat-trend__header-icon\" [decorative]=\"true\" />\n }\n </div>\n\n <div class=\"lc-stat-trend__row\">\n <span class=\"lc-stat-trend__value\">{{ value() }}</span>\n\n @if (change()) {\n <span class=\"lc-stat-trend__change\" [class]=\"trendColorClass()\">\n <span class=\"lc-stat-trend__icon\">{{ trendIcon() }}</span>\n {{ change() }}\n </span>\n }\n </div>\n\n @if (hasSparkline()) {\n <lc-sparkline\n [data]=\"sparklineData()\"\n [color]=\"resolvedSparklineColor()\"\n [width]=\"120\"\n [height]=\"28\"\n [filled]=\"true\"\n [strokeWidth]=\"1.5\"\n ></lc-sparkline>\n }\n</div>\n"],"mappings":"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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, input } from "@angular/core";
|
|
3
|
+
var StatusDotComponent = class StatusDotComponent {
|
|
4
|
+
tone = input("open", ...ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []);
|
|
5
|
+
size = input("md", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
|
|
6
|
+
pulse = input(false, ...ngDevMode ? [{ debugName: "pulse" }] : /* istanbul ignore next */ []);
|
|
7
|
+
label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
|
|
8
|
+
dotClasses = computed(() => {
|
|
9
|
+
const classes = [
|
|
10
|
+
"lc-status-dot",
|
|
11
|
+
`lc-status-dot--${this.tone()}`,
|
|
12
|
+
`lc-status-dot--${this.size()}`
|
|
13
|
+
];
|
|
14
|
+
if (this.pulse()) classes.push("lc-status-dot--pulse");
|
|
15
|
+
return classes.join(" ");
|
|
16
|
+
}, ...ngDevMode ? [{ debugName: "dotClasses" }] : /* istanbul ignore next */ []);
|
|
17
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
18
|
+
minVersion: "12.0.0",
|
|
19
|
+
version: "22.2.2",
|
|
20
|
+
ngImport: i0,
|
|
21
|
+
type: StatusDotComponent,
|
|
22
|
+
deps: [],
|
|
23
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
24
|
+
});
|
|
25
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
26
|
+
minVersion: "17.1.0",
|
|
27
|
+
version: "22.2.2",
|
|
28
|
+
type: StatusDotComponent,
|
|
29
|
+
isStandalone: true,
|
|
30
|
+
selector: "lc-status-dot",
|
|
31
|
+
inputs: {
|
|
32
|
+
tone: {
|
|
33
|
+
classPropertyName: "tone",
|
|
34
|
+
publicName: "tone",
|
|
35
|
+
isSignal: true,
|
|
36
|
+
isRequired: false,
|
|
37
|
+
transformFunction: null
|
|
38
|
+
},
|
|
39
|
+
size: {
|
|
40
|
+
classPropertyName: "size",
|
|
41
|
+
publicName: "size",
|
|
42
|
+
isSignal: true,
|
|
43
|
+
isRequired: false,
|
|
44
|
+
transformFunction: null
|
|
45
|
+
},
|
|
46
|
+
pulse: {
|
|
47
|
+
classPropertyName: "pulse",
|
|
48
|
+
publicName: "pulse",
|
|
49
|
+
isSignal: true,
|
|
50
|
+
isRequired: false,
|
|
51
|
+
transformFunction: null
|
|
52
|
+
},
|
|
53
|
+
label: {
|
|
54
|
+
classPropertyName: "label",
|
|
55
|
+
publicName: "label",
|
|
56
|
+
isSignal: true,
|
|
57
|
+
isRequired: false,
|
|
58
|
+
transformFunction: null
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
ngImport: i0,
|
|
62
|
+
template: "<span\n [class]=\"dotClasses()\"\n [attr.role]=\"label() ? 'img' : null\"\n [attr.aria-label]=\"label() || null\"\n [attr.aria-hidden]=\"label() ? null : 'true'\"\n></span>\n",
|
|
63
|
+
styles: ["@charset \"UTF-8\";lc-status-dot{display:inline-flex;align-items:center}.lc-status-dot{position:relative;display:inline-block;flex-shrink:0;border-radius:var(--border-radius-full, 9999px);background-color:currentColor}.lc-status-dot--sm{width:.375rem;height:.375rem}.lc-status-dot--md{width:.5rem;height:.5rem}.lc-status-dot--done{color:var(--color-success)}.lc-status-dot--run{color:var(--color-primary-500)}.lc-status-dot--wait{color:var(--color-warning)}.lc-status-dot--blocked{color:var(--color-error)}.lc-status-dot--open{color:var(--color-text-tertiary, var(--color-text-secondary))}.lc-status-dot--pulse:after{content:\"\";position:absolute;inset:0;border-radius:inherit;background-color:currentColor;animation:lc-status-dot-pulse 1.6s ease-out infinite}@keyframes lc-status-dot-pulse{0%{transform:scale(1);opacity:.5}to{transform:scale(2.75);opacity:0}}@media(prefers-reduced-motion:reduce){.lc-status-dot--pulse:after{animation:none;display:none}}\n"],
|
|
64
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush,
|
|
65
|
+
encapsulation: i0.ViewEncapsulation.None
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
69
|
+
minVersion: "12.0.0",
|
|
70
|
+
version: "22.2.2",
|
|
71
|
+
ngImport: i0,
|
|
72
|
+
type: StatusDotComponent,
|
|
73
|
+
decorators: [{
|
|
74
|
+
type: Component,
|
|
75
|
+
args: [{
|
|
76
|
+
selector: "lc-status-dot",
|
|
77
|
+
standalone: true,
|
|
78
|
+
imports: [],
|
|
79
|
+
encapsulation: ViewEncapsulation.None,
|
|
80
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
81
|
+
template: "<span\n [class]=\"dotClasses()\"\n [attr.role]=\"label() ? 'img' : null\"\n [attr.aria-label]=\"label() || null\"\n [attr.aria-hidden]=\"label() ? null : 'true'\"\n></span>\n",
|
|
82
|
+
styles: ["@charset \"UTF-8\";lc-status-dot{display:inline-flex;align-items:center}.lc-status-dot{position:relative;display:inline-block;flex-shrink:0;border-radius:var(--border-radius-full, 9999px);background-color:currentColor}.lc-status-dot--sm{width:.375rem;height:.375rem}.lc-status-dot--md{width:.5rem;height:.5rem}.lc-status-dot--done{color:var(--color-success)}.lc-status-dot--run{color:var(--color-primary-500)}.lc-status-dot--wait{color:var(--color-warning)}.lc-status-dot--blocked{color:var(--color-error)}.lc-status-dot--open{color:var(--color-text-tertiary, var(--color-text-secondary))}.lc-status-dot--pulse:after{content:\"\";position:absolute;inset:0;border-radius:inherit;background-color:currentColor;animation:lc-status-dot-pulse 1.6s ease-out infinite}@keyframes lc-status-dot-pulse{0%{transform:scale(1);opacity:.5}to{transform:scale(2.75);opacity:0}}@media(prefers-reduced-motion:reduce){.lc-status-dot--pulse:after{animation:none;display:none}}\n"]
|
|
83
|
+
}]
|
|
84
|
+
}],
|
|
85
|
+
propDecorators: {
|
|
86
|
+
tone: [{
|
|
87
|
+
type: i0.Input,
|
|
88
|
+
args: [{
|
|
89
|
+
isSignal: true,
|
|
90
|
+
alias: "tone",
|
|
91
|
+
required: false
|
|
92
|
+
}]
|
|
93
|
+
}],
|
|
94
|
+
size: [{
|
|
95
|
+
type: i0.Input,
|
|
96
|
+
args: [{
|
|
97
|
+
isSignal: true,
|
|
98
|
+
alias: "size",
|
|
99
|
+
required: false
|
|
100
|
+
}]
|
|
101
|
+
}],
|
|
102
|
+
pulse: [{
|
|
103
|
+
type: i0.Input,
|
|
104
|
+
args: [{
|
|
105
|
+
isSignal: true,
|
|
106
|
+
alias: "pulse",
|
|
107
|
+
required: false
|
|
108
|
+
}]
|
|
109
|
+
}],
|
|
110
|
+
label: [{
|
|
111
|
+
type: i0.Input,
|
|
112
|
+
args: [{
|
|
113
|
+
isSignal: true,
|
|
114
|
+
alias: "label",
|
|
115
|
+
required: false
|
|
116
|
+
}]
|
|
117
|
+
}]
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
export { StatusDotComponent };
|
|
121
|
+
|
|
122
|
+
//# sourceMappingURL=lifecorner-angular-ui-kit-status-dot.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecorner-angular-ui-kit-status-dot.mjs","names":[],"sources":["../../../../libs/angular-ui-kit/src/lib/status-dot/status-dot.component.ts","../../../../libs/angular-ui-kit/src/lib/status-dot/status-dot.component.html"],"sourcesContent":["import { Component, ChangeDetectionStrategy, ViewEncapsulation, input, computed } from '@angular/core';\n\nexport type StatusDotTone = 'done' | 'run' | 'wait' | 'blocked' | 'open';\nexport type StatusDotSize = 'sm' | 'md';\n\n/**\n * Status dot — the small traffic-light atom used in list rows, rails and\n * boards to signal an item's state at a glance.\n *\n * Features:\n * - Five semantic tones: done (success), run (brand teal), wait (warning),\n * blocked (error), open (neutral)\n * - Optional pulse animation for \"in progress\" states (static under\n * prefers-reduced-motion)\n * - Decorative by default (aria-hidden); pass `label` to expose the state\n * to assistive technology\n *\n * @example\n * ```html\n * <lc-status-dot tone=\"run\" [pulse]=\"true\" label=\"In Arbeit\" />\n * <lc-status-dot tone=\"blocked\" />\n * ```\n */\n@Component({\n selector: 'lc-status-dot',\n standalone: true,\n imports: [],\n templateUrl: './status-dot.component.html',\n styleUrl: './status-dot.component.scss',\n encapsulation: ViewEncapsulation.None, // Required for dynamic tone class styling\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StatusDotComponent {\n /** Semantic tone of the dot */\n readonly tone = input<StatusDotTone>('open');\n\n /** Size of the dot (sm = 6px for dense list rows, md = 8px) */\n readonly size = input<StatusDotSize>('md');\n\n /**\n * Pulse animation for \"in progress\" states. Renders static under\n * prefers-reduced-motion.\n * @default false\n */\n readonly pulse = input(false);\n\n /**\n * Accessible label for the state (e.g. \"In Arbeit\"). Without it the dot is\n * treated as decorative and hidden from assistive technology.\n */\n readonly label = input('');\n\n readonly dotClasses = computed(() => {\n const classes = ['lc-status-dot', `lc-status-dot--${this.tone()}`, `lc-status-dot--${this.size()}`];\n if (this.pulse()) {\n classes.push('lc-status-dot--pulse');\n }\n return classes.join(' ');\n });\n}\n","<span\n [class]=\"dotClasses()\"\n [attr.role]=\"label() ? 'img' : null\"\n [attr.aria-label]=\"label() || null\"\n [attr.aria-hidden]=\"label() ? null : 'true'\"\n></span>\n"],"mappings":";;AAgCA,IAAa,qBAAb,MAAa,mBAAkB;CAEpB,OAAO,MAAqB,QAAO,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAGnC,OAAO,MAAqB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAOjC,QAAQ,MAAM,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAMpB,QAAQ,MAAM,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAEjB,aAAa,eAAc;EAClC,MAAM,UAAU;GAAC;GAAiB,kBAAkB,KAAK,KAAI;GAAM,kBAAkB,KAAK,KAAI;EAAI;EAClG,IAAI,KAAK,MAAK,GACZ,QAAQ,KAAK,sBAAsB;EAErC,OAAO,QAAQ,KAAK,GAAG;CACzB,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CA1BS,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAkB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAlB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAkB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,UAAA;EAAA,UChC/B;EAMA,QAAA,CAAA,g8BAAA;EAAA,iBAAA,GAAA,wBAAA;EAAA,eAAA,GAAA,kBAAA;CAAA,CAAA;;AD0Ba,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAkB,YAAA,CAAA;EAT9B,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAe,YACb;GAAI,SACP,CAAA;GAAE,eAGI,kBAAkB;GAAI,iBACpB,wBAAwB;GAAM,UAAA;GAAA,QAAA,CAAA,g8BAAA;EAAA,CAAA"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import { ChangeDetectionStrategy, Component, computed, input, model, output } from "@angular/core";
|
|
3
|
+
let nextStepperId = 0;
|
|
4
|
+
var StepperComponent = class StepperComponent {
|
|
5
|
+
steps = input.required(...ngDevMode ? [{ debugName: "steps" }] : /* istanbul ignore next */ []);
|
|
6
|
+
activeStep = model(0, ...ngDevMode ? [{ debugName: "activeStep" }] : /* istanbul ignore next */ []);
|
|
7
|
+
linear = input(true, ...ngDevMode ? [{ debugName: "linear" }] : /* istanbul ignore next */ []);
|
|
8
|
+
orientation = input("horizontal", ...ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []);
|
|
9
|
+
optionalLabel = input("Optional", ...ngDevMode ? [{ debugName: "optionalLabel" }] : /* istanbul ignore next */ []);
|
|
10
|
+
stepAriaLabel = input("Step {n} of {m}: {label}", ...ngDevMode ? [{ debugName: "stepAriaLabel" }] : /* istanbul ignore next */ []);
|
|
11
|
+
stepChange = output();
|
|
12
|
+
instanceId = `lc-stepper-${++nextStepperId}`;
|
|
13
|
+
totalSteps = computed(() => this.steps().length, ...ngDevMode ? [{ debugName: "totalSteps" }] : /* istanbul ignore next */ []);
|
|
14
|
+
isFirstStep = computed(() => this.activeStep() === 0, ...ngDevMode ? [{ debugName: "isFirstStep" }] : /* istanbul ignore next */ []);
|
|
15
|
+
isLastStep = computed(() => this.activeStep() === this.totalSteps() - 1, ...ngDevMode ? [{ debugName: "isLastStep" }] : /* istanbul ignore next */ []);
|
|
16
|
+
getStepState(index) {
|
|
17
|
+
const current = this.activeStep();
|
|
18
|
+
if (index < current) return "completed";
|
|
19
|
+
if (index === current) return "active";
|
|
20
|
+
return "pending";
|
|
21
|
+
}
|
|
22
|
+
isStepNavigable(index) {
|
|
23
|
+
return !this.linear() || index <= this.activeStep();
|
|
24
|
+
}
|
|
25
|
+
getStepAriaLabel(index) {
|
|
26
|
+
const step = this.steps()[index];
|
|
27
|
+
if (!step) return "";
|
|
28
|
+
const name = this.stepAriaLabel().replace("{n}", String(index + 1)).replace("{m}", String(this.totalSteps())).replace("{label}", step.label);
|
|
29
|
+
return step.optional ? `${name}, ${this.optionalLabel()}` : name;
|
|
30
|
+
}
|
|
31
|
+
getDescriptionId(index) {
|
|
32
|
+
return this.steps()[index]?.description ? `${this.instanceId}-desc-${index}` : null;
|
|
33
|
+
}
|
|
34
|
+
goToStep(index) {
|
|
35
|
+
if (index === this.activeStep() || !this.isStepNavigable(index)) return;
|
|
36
|
+
this.activeStep.set(index);
|
|
37
|
+
this.stepChange.emit(index);
|
|
38
|
+
}
|
|
39
|
+
next() {
|
|
40
|
+
const current = this.activeStep();
|
|
41
|
+
if (current < this.totalSteps() - 1) {
|
|
42
|
+
this.activeStep.set(current + 1);
|
|
43
|
+
this.stepChange.emit(current + 1);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
previous() {
|
|
47
|
+
const current = this.activeStep();
|
|
48
|
+
if (current > 0) {
|
|
49
|
+
this.activeStep.set(current - 1);
|
|
50
|
+
this.stepChange.emit(current - 1);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
getStepClasses(index) {
|
|
54
|
+
const state = this.getStepState(index);
|
|
55
|
+
const classes = ["lc-stepper__step"];
|
|
56
|
+
classes.push(`lc-stepper__step--${state}`);
|
|
57
|
+
if (!this.linear() || state === "completed") classes.push("lc-stepper__step--clickable");
|
|
58
|
+
return classes.join(" ");
|
|
59
|
+
}
|
|
60
|
+
getConnectorClasses(index) {
|
|
61
|
+
const classes = ["lc-stepper__connector"];
|
|
62
|
+
if (index < this.activeStep()) classes.push("lc-stepper__connector--completed");
|
|
63
|
+
return classes.join(" ");
|
|
64
|
+
}
|
|
65
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
66
|
+
minVersion: "12.0.0",
|
|
67
|
+
version: "22.2.2",
|
|
68
|
+
ngImport: i0,
|
|
69
|
+
type: StepperComponent,
|
|
70
|
+
deps: [],
|
|
71
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
72
|
+
});
|
|
73
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
74
|
+
minVersion: "17.0.0",
|
|
75
|
+
version: "22.2.2",
|
|
76
|
+
type: StepperComponent,
|
|
77
|
+
isStandalone: true,
|
|
78
|
+
selector: "lc-stepper",
|
|
79
|
+
inputs: {
|
|
80
|
+
steps: {
|
|
81
|
+
classPropertyName: "steps",
|
|
82
|
+
publicName: "steps",
|
|
83
|
+
isSignal: true,
|
|
84
|
+
isRequired: true,
|
|
85
|
+
transformFunction: null
|
|
86
|
+
},
|
|
87
|
+
activeStep: {
|
|
88
|
+
classPropertyName: "activeStep",
|
|
89
|
+
publicName: "activeStep",
|
|
90
|
+
isSignal: true,
|
|
91
|
+
isRequired: false,
|
|
92
|
+
transformFunction: null
|
|
93
|
+
},
|
|
94
|
+
linear: {
|
|
95
|
+
classPropertyName: "linear",
|
|
96
|
+
publicName: "linear",
|
|
97
|
+
isSignal: true,
|
|
98
|
+
isRequired: false,
|
|
99
|
+
transformFunction: null
|
|
100
|
+
},
|
|
101
|
+
orientation: {
|
|
102
|
+
classPropertyName: "orientation",
|
|
103
|
+
publicName: "orientation",
|
|
104
|
+
isSignal: true,
|
|
105
|
+
isRequired: false,
|
|
106
|
+
transformFunction: null
|
|
107
|
+
},
|
|
108
|
+
optionalLabel: {
|
|
109
|
+
classPropertyName: "optionalLabel",
|
|
110
|
+
publicName: "optionalLabel",
|
|
111
|
+
isSignal: true,
|
|
112
|
+
isRequired: false,
|
|
113
|
+
transformFunction: null
|
|
114
|
+
},
|
|
115
|
+
stepAriaLabel: {
|
|
116
|
+
classPropertyName: "stepAriaLabel",
|
|
117
|
+
publicName: "stepAriaLabel",
|
|
118
|
+
isSignal: true,
|
|
119
|
+
isRequired: false,
|
|
120
|
+
transformFunction: null
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
outputs: {
|
|
124
|
+
activeStep: "activeStepChange",
|
|
125
|
+
stepChange: "stepChange"
|
|
126
|
+
},
|
|
127
|
+
ngImport: i0,
|
|
128
|
+
template: "<div\n class=\"lc-stepper\"\n [class.lc-stepper--horizontal]=\"orientation() === 'horizontal'\"\n [class.lc-stepper--vertical]=\"orientation() === 'vertical'\"\n>\n <!-- Step indicators: an ordered list of buttons (position is conveyed by the list) -->\n <ol class=\"lc-stepper__header\">\n @for (step of steps(); track $index; let i = $index; let last = $last) {\n <li class=\"lc-stepper__item\">\n <button\n type=\"button\"\n [class]=\"getStepClasses(i)\"\n [disabled]=\"!isStepNavigable(i)\"\n [attr.aria-current]=\"getStepState(i) === 'active' ? 'step' : null\"\n [attr.aria-label]=\"getStepAriaLabel(i)\"\n [attr.aria-describedby]=\"getDescriptionId(i)\"\n (click)=\"goToStep(i)\"\n >\n <span class=\"lc-stepper__indicator\" aria-hidden=\"true\">\n @if (getStepState(i) === 'completed') {\n <!-- Checkmark for completed -->\n <svg class=\"lc-stepper__check\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path\n fill-rule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n } @else {\n <span class=\"lc-stepper__number\">{{ i + 1 }}</span>\n }\n </span>\n <span class=\"lc-stepper__label\">\n <span class=\"lc-stepper__title\">{{ step.label }}</span>\n @if (step.description) {\n <span class=\"lc-stepper__description\" [attr.id]=\"getDescriptionId(i)\">{{\n step.description\n }}</span>\n }\n @if (step.optional) {\n <span class=\"lc-stepper__optional\">{{ optionalLabel() }}</span>\n }\n </span>\n </button>\n\n @if (!last) {\n <span [class]=\"getConnectorClasses(i)\" aria-hidden=\"true\"></span>\n }\n </li>\n }\n </ol>\n\n <!-- Step content area (projected) -->\n <div class=\"lc-stepper__content\">\n <ng-content></ng-content>\n </div>\n</div>\n",
|
|
129
|
+
styles: [".lc-stepper{width:100%}.lc-stepper__header{display:flex;align-items:center;gap:0;list-style:none;margin:0;padding:0}.lc-stepper--horizontal .lc-stepper__header{flex-direction:row}.lc-stepper--vertical .lc-stepper__header{flex-direction:column;align-items:flex-start}.lc-stepper__item{display:flex;align-items:center;flex:1 1 auto;min-width:0}.lc-stepper__item:last-child{flex:0 0 auto}.lc-stepper--vertical .lc-stepper__item{flex-direction:column;align-items:flex-start;flex:0 0 auto}.lc-stepper__step{appearance:none;background:none;border:0;margin:0;padding:0;font:inherit;color:inherit;text-align:left;cursor:default;display:flex;align-items:center;gap:.75rem;flex-shrink:0;border-radius:var(--border-radius-sm)}.lc-stepper__step--clickable{cursor:pointer}.lc-stepper__step:disabled{cursor:default}.lc-stepper__step:focus-visible{outline:2px solid var(--color-primary-500);outline-offset:2px}.lc-stepper__indicator{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:var(--border-radius-full);font-size:var(--font-size-sm, .875rem);font-weight:var(--typography-font-weight-semibold, 600);transition:all .2s ease}.lc-stepper__step--pending .lc-stepper__indicator{background-color:var(--color-surface-hover);color:var(--color-text-tertiary);border:1px solid var(--color-border)}.lc-stepper__step--active .lc-stepper__indicator{background-color:var(--color-primary-fill);color:var(--color-on-primary);box-shadow:0 0 0 4px #20849740}.lc-stepper__step--completed .lc-stepper__indicator{background-color:var(--color-success);color:var(--color-neutral-900)}.lc-stepper__check{width:1rem;height:1rem}.lc-stepper__number{line-height:1}.lc-stepper__label{display:flex;flex-direction:column}.lc-stepper__title{font-size:var(--font-size-sm, .875rem);font-weight:var(--typography-font-weight-medium, 500);color:var(--color-text-primary)}.lc-stepper__step--pending .lc-stepper__title{color:var(--color-text-tertiary)}.lc-stepper__description{font-size:var(--font-size-xs, .75rem);color:var(--color-text-tertiary);margin-top:.125rem}.lc-stepper__optional{font-size:var(--font-size-xs, .75rem);color:var(--color-text-tertiary);font-style:italic;margin-top:.125rem}.lc-stepper__connector{flex:1;height:.125rem;min-width:2rem;margin:0 .5rem;background-color:var(--color-border);transition:background-color .2s ease}.lc-stepper__connector--completed{background-color:var(--color-success)}.lc-stepper--vertical .lc-stepper__connector{flex:0 0 auto;width:.125rem;height:2rem;min-width:0;margin:.25rem 0 .25rem 1rem}.lc-stepper__content{margin-top:1.5rem}\n"],
|
|
130
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
131
|
+
});
|
|
132
|
+
};
|
|
133
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
134
|
+
minVersion: "12.0.0",
|
|
135
|
+
version: "22.2.2",
|
|
136
|
+
ngImport: i0,
|
|
137
|
+
type: StepperComponent,
|
|
138
|
+
decorators: [{
|
|
139
|
+
type: Component,
|
|
140
|
+
args: [{
|
|
141
|
+
selector: "lc-stepper",
|
|
142
|
+
standalone: true,
|
|
143
|
+
imports: [],
|
|
144
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
145
|
+
template: "<div\n class=\"lc-stepper\"\n [class.lc-stepper--horizontal]=\"orientation() === 'horizontal'\"\n [class.lc-stepper--vertical]=\"orientation() === 'vertical'\"\n>\n <!-- Step indicators: an ordered list of buttons (position is conveyed by the list) -->\n <ol class=\"lc-stepper__header\">\n @for (step of steps(); track $index; let i = $index; let last = $last) {\n <li class=\"lc-stepper__item\">\n <button\n type=\"button\"\n [class]=\"getStepClasses(i)\"\n [disabled]=\"!isStepNavigable(i)\"\n [attr.aria-current]=\"getStepState(i) === 'active' ? 'step' : null\"\n [attr.aria-label]=\"getStepAriaLabel(i)\"\n [attr.aria-describedby]=\"getDescriptionId(i)\"\n (click)=\"goToStep(i)\"\n >\n <span class=\"lc-stepper__indicator\" aria-hidden=\"true\">\n @if (getStepState(i) === 'completed') {\n <!-- Checkmark for completed -->\n <svg class=\"lc-stepper__check\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path\n fill-rule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n } @else {\n <span class=\"lc-stepper__number\">{{ i + 1 }}</span>\n }\n </span>\n <span class=\"lc-stepper__label\">\n <span class=\"lc-stepper__title\">{{ step.label }}</span>\n @if (step.description) {\n <span class=\"lc-stepper__description\" [attr.id]=\"getDescriptionId(i)\">{{\n step.description\n }}</span>\n }\n @if (step.optional) {\n <span class=\"lc-stepper__optional\">{{ optionalLabel() }}</span>\n }\n </span>\n </button>\n\n @if (!last) {\n <span [class]=\"getConnectorClasses(i)\" aria-hidden=\"true\"></span>\n }\n </li>\n }\n </ol>\n\n <!-- Step content area (projected) -->\n <div class=\"lc-stepper__content\">\n <ng-content></ng-content>\n </div>\n</div>\n",
|
|
146
|
+
styles: [".lc-stepper{width:100%}.lc-stepper__header{display:flex;align-items:center;gap:0;list-style:none;margin:0;padding:0}.lc-stepper--horizontal .lc-stepper__header{flex-direction:row}.lc-stepper--vertical .lc-stepper__header{flex-direction:column;align-items:flex-start}.lc-stepper__item{display:flex;align-items:center;flex:1 1 auto;min-width:0}.lc-stepper__item:last-child{flex:0 0 auto}.lc-stepper--vertical .lc-stepper__item{flex-direction:column;align-items:flex-start;flex:0 0 auto}.lc-stepper__step{appearance:none;background:none;border:0;margin:0;padding:0;font:inherit;color:inherit;text-align:left;cursor:default;display:flex;align-items:center;gap:.75rem;flex-shrink:0;border-radius:var(--border-radius-sm)}.lc-stepper__step--clickable{cursor:pointer}.lc-stepper__step:disabled{cursor:default}.lc-stepper__step:focus-visible{outline:2px solid var(--color-primary-500);outline-offset:2px}.lc-stepper__indicator{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:var(--border-radius-full);font-size:var(--font-size-sm, .875rem);font-weight:var(--typography-font-weight-semibold, 600);transition:all .2s ease}.lc-stepper__step--pending .lc-stepper__indicator{background-color:var(--color-surface-hover);color:var(--color-text-tertiary);border:1px solid var(--color-border)}.lc-stepper__step--active .lc-stepper__indicator{background-color:var(--color-primary-fill);color:var(--color-on-primary);box-shadow:0 0 0 4px #20849740}.lc-stepper__step--completed .lc-stepper__indicator{background-color:var(--color-success);color:var(--color-neutral-900)}.lc-stepper__check{width:1rem;height:1rem}.lc-stepper__number{line-height:1}.lc-stepper__label{display:flex;flex-direction:column}.lc-stepper__title{font-size:var(--font-size-sm, .875rem);font-weight:var(--typography-font-weight-medium, 500);color:var(--color-text-primary)}.lc-stepper__step--pending .lc-stepper__title{color:var(--color-text-tertiary)}.lc-stepper__description{font-size:var(--font-size-xs, .75rem);color:var(--color-text-tertiary);margin-top:.125rem}.lc-stepper__optional{font-size:var(--font-size-xs, .75rem);color:var(--color-text-tertiary);font-style:italic;margin-top:.125rem}.lc-stepper__connector{flex:1;height:.125rem;min-width:2rem;margin:0 .5rem;background-color:var(--color-border);transition:background-color .2s ease}.lc-stepper__connector--completed{background-color:var(--color-success)}.lc-stepper--vertical .lc-stepper__connector{flex:0 0 auto;width:.125rem;height:2rem;min-width:0;margin:.25rem 0 .25rem 1rem}.lc-stepper__content{margin-top:1.5rem}\n"]
|
|
147
|
+
}]
|
|
148
|
+
}],
|
|
149
|
+
propDecorators: {
|
|
150
|
+
steps: [{
|
|
151
|
+
type: i0.Input,
|
|
152
|
+
args: [{
|
|
153
|
+
isSignal: true,
|
|
154
|
+
alias: "steps",
|
|
155
|
+
required: true
|
|
156
|
+
}]
|
|
157
|
+
}],
|
|
158
|
+
activeStep: [{
|
|
159
|
+
type: i0.Input,
|
|
160
|
+
args: [{
|
|
161
|
+
isSignal: true,
|
|
162
|
+
alias: "activeStep",
|
|
163
|
+
required: false
|
|
164
|
+
}]
|
|
165
|
+
}, {
|
|
166
|
+
type: i0.Output,
|
|
167
|
+
args: ["activeStepChange"]
|
|
168
|
+
}],
|
|
169
|
+
linear: [{
|
|
170
|
+
type: i0.Input,
|
|
171
|
+
args: [{
|
|
172
|
+
isSignal: true,
|
|
173
|
+
alias: "linear",
|
|
174
|
+
required: false
|
|
175
|
+
}]
|
|
176
|
+
}],
|
|
177
|
+
orientation: [{
|
|
178
|
+
type: i0.Input,
|
|
179
|
+
args: [{
|
|
180
|
+
isSignal: true,
|
|
181
|
+
alias: "orientation",
|
|
182
|
+
required: false
|
|
183
|
+
}]
|
|
184
|
+
}],
|
|
185
|
+
optionalLabel: [{
|
|
186
|
+
type: i0.Input,
|
|
187
|
+
args: [{
|
|
188
|
+
isSignal: true,
|
|
189
|
+
alias: "optionalLabel",
|
|
190
|
+
required: false
|
|
191
|
+
}]
|
|
192
|
+
}],
|
|
193
|
+
stepAriaLabel: [{
|
|
194
|
+
type: i0.Input,
|
|
195
|
+
args: [{
|
|
196
|
+
isSignal: true,
|
|
197
|
+
alias: "stepAriaLabel",
|
|
198
|
+
required: false
|
|
199
|
+
}]
|
|
200
|
+
}],
|
|
201
|
+
stepChange: [{
|
|
202
|
+
type: i0.Output,
|
|
203
|
+
args: ["stepChange"]
|
|
204
|
+
}]
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
export { StepperComponent };
|
|
208
|
+
|
|
209
|
+
//# sourceMappingURL=lifecorner-angular-ui-kit-stepper.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecorner-angular-ui-kit-stepper.mjs","names":[],"sources":["../../../../libs/angular-ui-kit/src/lib/stepper/stepper.component.ts","../../../../libs/angular-ui-kit/src/lib/stepper/stepper.component.html"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n model,\n computed,\n} from '@angular/core';\n\nexport interface StepperStep {\n readonly label: string;\n readonly description?: string;\n readonly optional?: boolean;\n}\n\nexport type StepState = 'pending' | 'active' | 'completed';\n\nlet nextStepperId = 0;\n\n/**\n * Stepper component for multi-step wizard workflows.\n *\n * Features:\n * - Horizontal and vertical orientations\n * - Active, completed, and pending step states\n * - Numbered step indicators with checkmark on completion\n * - Optional step descriptions and \"optional\" labels\n * - Linear mode restricting navigation to sequential steps\n * - Two-way active step binding\n * - Content projection for step body\n * - Accessible: steps are real buttons in an ordered list, the active step\n * carries `aria-current=\"step\"`, non-navigable steps are disabled\n *\n * @example\n * ```html\n * <lc-stepper [steps]=\"steps\" [(activeStep)]=\"currentStep\">\n * <div>Step content here</div>\n * </lc-stepper>\n * ```\n */\n@Component({\n selector: 'lc-stepper',\n standalone: true,\n imports: [],\n templateUrl: './stepper.component.html',\n styleUrl: './stepper.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StepperComponent {\n /** Step definitions */\n readonly steps = input.required<readonly StepperStep[]>();\n\n /** Active step index (0-based, two-way binding) */\n readonly activeStep = model<number>(0);\n\n /** Whether completed steps can be clicked to navigate back */\n readonly linear = input<boolean>(true);\n\n /** Orientation */\n readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n\n /** Text shown under optional steps */\n readonly optionalLabel = input('Optional');\n\n /**\n * Accessible name template for each step button. Placeholders: `{n}`\n * (1-based step number), `{m}` (step count), `{label}`. Optional steps get\n * `optionalLabel` appended.\n */\n readonly stepAriaLabel = input('Step {n} of {m}: {label}');\n\n /** Emitted when active step changes */\n readonly stepChange = output<number>();\n\n /** Per-instance id prefix so description ids stay unique across steppers */\n private readonly instanceId = `lc-stepper-${++nextStepperId}`;\n\n /** Computed total step count */\n readonly totalSteps = computed(() => this.steps().length);\n\n /** Whether we're on the first step */\n readonly isFirstStep = computed(() => this.activeStep() === 0);\n\n /** Whether we're on the last step */\n readonly isLastStep = computed(() => this.activeStep() === this.totalSteps() - 1);\n\n /** Get the state of a step */\n getStepState(index: number): StepState {\n const current = this.activeStep();\n if (index < current) return 'completed';\n if (index === current) return 'active';\n return 'pending';\n }\n\n /**\n * Whether the step at `index` can be activated by the user. In linear mode\n * only completed steps (and the active one) are reachable.\n */\n isStepNavigable(index: number): boolean {\n return !this.linear() || index <= this.activeStep();\n }\n\n /** Accessible name for the step button at `index` */\n getStepAriaLabel(index: number): string {\n const step = this.steps()[index];\n if (!step) return '';\n const name = this.stepAriaLabel()\n .replace('{n}', String(index + 1))\n .replace('{m}', String(this.totalSteps()))\n .replace('{label}', step.label);\n return step.optional ? `${name}, ${this.optionalLabel()}` : name;\n }\n\n /** Id of the description element for `aria-describedby` (or null) */\n getDescriptionId(index: number): string | null {\n return this.steps()[index]?.description ? `${this.instanceId}-desc-${index}` : null;\n }\n\n /** Navigate to a specific step (only if navigable, see `isStepNavigable`) */\n goToStep(index: number): void {\n if (index === this.activeStep() || !this.isStepNavigable(index)) {\n return;\n }\n this.activeStep.set(index);\n this.stepChange.emit(index);\n }\n\n /** Go to next step */\n next(): void {\n const current = this.activeStep();\n if (current < this.totalSteps() - 1) {\n this.activeStep.set(current + 1);\n this.stepChange.emit(current + 1);\n }\n }\n\n /** Go to previous step */\n previous(): void {\n const current = this.activeStep();\n if (current > 0) {\n this.activeStep.set(current - 1);\n this.stepChange.emit(current - 1);\n }\n }\n\n /** Get CSS classes for step indicator */\n getStepClasses(index: number): string {\n const state = this.getStepState(index);\n const classes = ['lc-stepper__step'];\n classes.push(`lc-stepper__step--${state}`);\n if (!this.linear() || state === 'completed') {\n classes.push('lc-stepper__step--clickable');\n }\n return classes.join(' ');\n }\n\n /** Get CSS classes for connector line */\n getConnectorClasses(index: number): string {\n const classes = ['lc-stepper__connector'];\n if (index < this.activeStep()) {\n classes.push('lc-stepper__connector--completed');\n }\n return classes.join(' ');\n }\n}\n","<div\n class=\"lc-stepper\"\n [class.lc-stepper--horizontal]=\"orientation() === 'horizontal'\"\n [class.lc-stepper--vertical]=\"orientation() === 'vertical'\"\n>\n <!-- Step indicators: an ordered list of buttons (position is conveyed by the list) -->\n <ol class=\"lc-stepper__header\">\n @for (step of steps(); track $index; let i = $index; let last = $last) {\n <li class=\"lc-stepper__item\">\n <button\n type=\"button\"\n [class]=\"getStepClasses(i)\"\n [disabled]=\"!isStepNavigable(i)\"\n [attr.aria-current]=\"getStepState(i) === 'active' ? 'step' : null\"\n [attr.aria-label]=\"getStepAriaLabel(i)\"\n [attr.aria-describedby]=\"getDescriptionId(i)\"\n (click)=\"goToStep(i)\"\n >\n <span class=\"lc-stepper__indicator\" aria-hidden=\"true\">\n @if (getStepState(i) === 'completed') {\n <!-- Checkmark for completed -->\n <svg class=\"lc-stepper__check\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path\n fill-rule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clip-rule=\"evenodd\"\n />\n </svg>\n } @else {\n <span class=\"lc-stepper__number\">{{ i + 1 }}</span>\n }\n </span>\n <span class=\"lc-stepper__label\">\n <span class=\"lc-stepper__title\">{{ step.label }}</span>\n @if (step.description) {\n <span class=\"lc-stepper__description\" [attr.id]=\"getDescriptionId(i)\">{{\n step.description\n }}</span>\n }\n @if (step.optional) {\n <span class=\"lc-stepper__optional\">{{ optionalLabel() }}</span>\n }\n </span>\n </button>\n\n @if (!last) {\n <span [class]=\"getConnectorClasses(i)\" aria-hidden=\"true\"></span>\n }\n </li>\n }\n </ol>\n\n <!-- Step content area (projected) -->\n <div class=\"lc-stepper__content\">\n <ng-content></ng-content>\n </div>\n</div>\n"],"mappings":"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"}
|