@masmarino/gabarit 2.0.0 → 2.1.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 +131 -85
- package/accordion/README.md +56 -0
- package/alert/README.md +87 -0
- package/app-shell/README.md +133 -0
- package/auth/README.md +155 -0
- package/auth-activate/README.md +119 -0
- package/auth-login/README.md +113 -0
- package/auth-register/README.md +104 -0
- package/auth-reset-password/README.md +120 -0
- package/autocomplete/README.md +77 -0
- package/avatar/README.md +34 -0
- package/avatar-group/README.md +47 -0
- package/badge/README.md +177 -0
- package/bar-chart/README.md +44 -0
- package/breadcrumb/README.md +38 -0
- package/button/README.md +175 -0
- package/card/README.md +179 -0
- package/checkbox/README.md +50 -0
- package/checkbox-group/README.md +78 -0
- package/confirm-danger-modal/README.md +77 -0
- package/copy-button/README.md +90 -0
- package/copy-field/README.md +54 -0
- package/date-picker/README.md +84 -0
- package/description-list/README.md +63 -0
- package/dimension-card/README.md +39 -0
- package/disclosure/README.md +48 -0
- package/divider/README.md +31 -0
- package/drawer/README.md +49 -0
- package/empty-state/README.md +84 -0
- package/fesm2022/masmarino-gabarit-accordion.mjs +243 -0
- package/fesm2022/masmarino-gabarit-accordion.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-alert.mjs +208 -0
- package/fesm2022/masmarino-gabarit-alert.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-app-shell.mjs +378 -0
- package/fesm2022/masmarino-gabarit-app-shell.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-auth-activate.mjs +415 -0
- package/fesm2022/masmarino-gabarit-auth-activate.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-auth-login.mjs +467 -0
- package/fesm2022/masmarino-gabarit-auth-login.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-auth-register.mjs +457 -0
- package/fesm2022/masmarino-gabarit-auth-register.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-auth-reset-password.mjs +364 -0
- package/fesm2022/masmarino-gabarit-auth-reset-password.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-auth.mjs +844 -0
- package/fesm2022/masmarino-gabarit-auth.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-autocomplete.mjs +475 -0
- package/fesm2022/masmarino-gabarit-autocomplete.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-avatar-group.mjs +202 -0
- package/fesm2022/masmarino-gabarit-avatar-group.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-avatar.mjs +107 -0
- package/fesm2022/masmarino-gabarit-avatar.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-badge.mjs +449 -0
- package/fesm2022/masmarino-gabarit-badge.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-bar-chart.mjs +408 -0
- package/fesm2022/masmarino-gabarit-bar-chart.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-breadcrumb.mjs +59 -0
- package/fesm2022/masmarino-gabarit-breadcrumb.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-button.mjs +374 -0
- package/fesm2022/masmarino-gabarit-button.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-card.mjs +400 -0
- package/fesm2022/masmarino-gabarit-card.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-chart.mjs +1289 -0
- package/fesm2022/masmarino-gabarit-chart.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-checkbox-group.mjs +335 -0
- package/fesm2022/masmarino-gabarit-checkbox-group.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-checkbox.mjs +170 -0
- package/fesm2022/masmarino-gabarit-checkbox.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-confirm-danger-modal.mjs +387 -0
- package/fesm2022/masmarino-gabarit-confirm-danger-modal.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-copy-button.mjs +407 -0
- package/fesm2022/masmarino-gabarit-copy-button.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-copy-field.mjs +229 -0
- package/fesm2022/masmarino-gabarit-copy-field.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-date-picker.mjs +1242 -0
- package/fesm2022/masmarino-gabarit-date-picker.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-description-list.mjs +127 -0
- package/fesm2022/masmarino-gabarit-description-list.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-dimension-card.mjs +162 -0
- package/fesm2022/masmarino-gabarit-dimension-card.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-disclosure.mjs +154 -0
- package/fesm2022/masmarino-gabarit-disclosure.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-divider.mjs +90 -0
- package/fesm2022/masmarino-gabarit-divider.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-docs.mjs +16 -2
- package/fesm2022/masmarino-gabarit-docs.mjs.map +1 -1
- package/fesm2022/masmarino-gabarit-drawer.mjs +209 -0
- package/fesm2022/masmarino-gabarit-drawer.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-empty-state.mjs +226 -0
- package/fesm2022/masmarino-gabarit-empty-state.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-file-upload.mjs +335 -0
- package/fesm2022/masmarino-gabarit-file-upload.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-floating-panel.mjs +24 -0
- package/fesm2022/masmarino-gabarit-floating-panel.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-format.mjs +345 -0
- package/fesm2022/masmarino-gabarit-format.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-funnel-chart.mjs +247 -0
- package/fesm2022/masmarino-gabarit-funnel-chart.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-gauge-bar.mjs +180 -0
- package/fesm2022/masmarino-gabarit-gauge-bar.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-git-field.mjs +127 -0
- package/fesm2022/masmarino-gabarit-git-field.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-icon-marker.mjs +150 -0
- package/fesm2022/masmarino-gabarit-icon-marker.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-icon.mjs +308 -0
- package/fesm2022/masmarino-gabarit-icon.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-input.mjs +493 -0
- package/fesm2022/masmarino-gabarit-input.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-job-graph.mjs +216 -0
- package/fesm2022/masmarino-gabarit-job-graph.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-job-status.mjs +104 -0
- package/fesm2022/masmarino-gabarit-job-status.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-line-chart.mjs +574 -0
- package/fesm2022/masmarino-gabarit-line-chart.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-list-card.mjs +320 -0
- package/fesm2022/masmarino-gabarit-list-card.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-list-row.mjs +58 -0
- package/fesm2022/masmarino-gabarit-list-row.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-list-toolbar.mjs +369 -0
- package/fesm2022/masmarino-gabarit-list-toolbar.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-menu.mjs +464 -0
- package/fesm2022/masmarino-gabarit-menu.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-mfa-enrollment.mjs +897 -0
- package/fesm2022/masmarino-gabarit-mfa-enrollment.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-mfa-settings.mjs +629 -0
- package/fesm2022/masmarino-gabarit-mfa-settings.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-modal.mjs +260 -0
- package/fesm2022/masmarino-gabarit-modal.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-nav-tabs.mjs +332 -0
- package/fesm2022/masmarino-gabarit-nav-tabs.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-notification-dot.mjs +119 -0
- package/fesm2022/masmarino-gabarit-notification-dot.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-page-header.mjs +78 -0
- package/fesm2022/masmarino-gabarit-page-header.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-page-layout.mjs +157 -0
- package/fesm2022/masmarino-gabarit-page-layout.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-pagination.mjs +415 -0
- package/fesm2022/masmarino-gabarit-pagination.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-panel.mjs +80 -0
- package/fesm2022/masmarino-gabarit-panel.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-passkey-settings.mjs +606 -0
- package/fesm2022/masmarino-gabarit-passkey-settings.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-pie-chart.mjs +317 -0
- package/fesm2022/masmarino-gabarit-pie-chart.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-popover.mjs +142 -0
- package/fesm2022/masmarino-gabarit-popover.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-radio-group.mjs +202 -0
- package/fesm2022/masmarino-gabarit-radio-group.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-save-status.mjs +142 -0
- package/fesm2022/masmarino-gabarit-save-status.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-search-bar.mjs +576 -0
- package/fesm2022/masmarino-gabarit-search-bar.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-secret-reveal.mjs +348 -0
- package/fesm2022/masmarino-gabarit-secret-reveal.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-segmented-control.mjs +272 -0
- package/fesm2022/masmarino-gabarit-segmented-control.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-select.mjs +512 -0
- package/fesm2022/masmarino-gabarit-select.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-skeleton-list.mjs +189 -0
- package/fesm2022/masmarino-gabarit-skeleton-list.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-skeleton.mjs +109 -0
- package/fesm2022/masmarino-gabarit-skeleton.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-slider.mjs +239 -0
- package/fesm2022/masmarino-gabarit-slider.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-sparkline.mjs +276 -0
- package/fesm2022/masmarino-gabarit-sparkline.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-spinner.mjs +86 -0
- package/fesm2022/masmarino-gabarit-spinner.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-stat-grid.mjs +139 -0
- package/fesm2022/masmarino-gabarit-stat-grid.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-stat-tile.mjs +312 -0
- package/fesm2022/masmarino-gabarit-stat-tile.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-stepper.mjs +219 -0
- package/fesm2022/masmarino-gabarit-stepper.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-switch.mjs +151 -0
- package/fesm2022/masmarino-gabarit-switch.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-table.mjs +206 -0
- package/fesm2022/masmarino-gabarit-table.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-tabs.mjs +210 -0
- package/fesm2022/masmarino-gabarit-tabs.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-tag-input.mjs +288 -0
- package/fesm2022/masmarino-gabarit-tag-input.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-tag.mjs +155 -0
- package/fesm2022/masmarino-gabarit-tag.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-textarea.mjs +369 -0
- package/fesm2022/masmarino-gabarit-textarea.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-timeline-chart.mjs +521 -0
- package/fesm2022/masmarino-gabarit-timeline-chart.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-toaster.mjs +220 -0
- package/fesm2022/masmarino-gabarit-toaster.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-tooltip.mjs +185 -0
- package/fesm2022/masmarino-gabarit-tooltip.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-tree.mjs +258 -0
- package/fesm2022/masmarino-gabarit-tree.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-user-chip.mjs +106 -0
- package/fesm2022/masmarino-gabarit-user-chip.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit.mjs +83 -24785
- package/fesm2022/masmarino-gabarit.mjs.map +1 -1
- package/file-upload/README.md +47 -0
- package/funnel-chart/README.md +39 -0
- package/gauge-bar/README.md +35 -0
- package/git-field/README.md +34 -0
- package/icon/README.md +52 -0
- package/icon-marker/README.md +37 -0
- package/input/README.md +120 -0
- package/job-graph/README.md +76 -0
- package/job-status/README.md +34 -0
- package/line-chart/README.md +52 -0
- package/list-card/README.md +144 -0
- package/list-row/README.md +72 -0
- package/list-toolbar/README.md +52 -0
- package/menu/README.md +90 -0
- package/mfa-enrollment/README.md +189 -0
- package/mfa-settings/README.md +154 -0
- package/modal/README.md +72 -0
- package/nav-tabs/README.md +106 -0
- package/notification-dot/README.md +43 -0
- package/package.json +329 -1
- package/page-header/README.md +56 -0
- package/page-layout/README.md +76 -0
- package/pagination/README.md +73 -0
- package/panel/README.md +56 -0
- package/passkey-settings/README.md +120 -0
- package/pie-chart/README.md +85 -0
- package/popover/README.md +62 -0
- package/radio-group/README.md +47 -0
- package/save-status/README.md +44 -0
- package/search-bar/README.md +84 -0
- package/secret-reveal/README.md +60 -0
- package/segmented-control/README.md +79 -0
- package/select/README.md +61 -0
- package/skeleton/README.md +49 -0
- package/skeleton-list/README.md +40 -0
- package/slider/README.md +44 -0
- package/sparkline/README.md +37 -0
- package/spinner/README.md +41 -0
- package/stat-grid/README.md +47 -0
- package/stat-tile/README.md +75 -0
- package/stepper/README.md +67 -0
- package/switch/README.md +51 -0
- package/table/README.md +75 -0
- package/tabs/README.md +34 -0
- package/tag/README.md +34 -0
- package/tag-input/README.md +45 -0
- package/textarea/README.md +76 -0
- package/timeline-chart/README.md +49 -0
- package/toaster/README.md +92 -0
- package/tooltip/README.md +50 -0
- package/tree/README.md +79 -0
- package/types/masmarino-gabarit-accordion.d.ts +54 -0
- package/types/masmarino-gabarit-alert.d.ts +65 -0
- package/types/masmarino-gabarit-app-shell.d.ts +102 -0
- package/types/masmarino-gabarit-auth-activate.d.ts +70 -0
- package/types/masmarino-gabarit-auth-login.d.ts +63 -0
- package/types/masmarino-gabarit-auth-register.d.ts +66 -0
- package/types/masmarino-gabarit-auth-reset-password.d.ts +53 -0
- package/types/masmarino-gabarit-auth.d.ts +543 -0
- package/types/masmarino-gabarit-autocomplete.d.ts +140 -0
- package/types/masmarino-gabarit-avatar-group.d.ts +60 -0
- package/types/masmarino-gabarit-avatar.d.ts +31 -0
- package/types/masmarino-gabarit-badge.d.ts +139 -0
- package/types/masmarino-gabarit-bar-chart.d.ts +111 -0
- package/types/masmarino-gabarit-breadcrumb.d.ts +12 -0
- package/types/masmarino-gabarit-button.d.ts +108 -0
- package/types/masmarino-gabarit-card.d.ts +102 -0
- package/types/masmarino-gabarit-chart.d.ts +361 -0
- package/types/masmarino-gabarit-checkbox-group.d.ts +113 -0
- package/types/masmarino-gabarit-checkbox.d.ts +49 -0
- package/types/masmarino-gabarit-confirm-danger-modal.d.ts +94 -0
- package/types/masmarino-gabarit-copy-button.d.ts +111 -0
- package/types/masmarino-gabarit-copy-field.d.ts +64 -0
- package/types/masmarino-gabarit-date-picker.d.ts +399 -0
- package/types/masmarino-gabarit-description-list.d.ts +40 -0
- package/types/masmarino-gabarit-dimension-card.d.ts +55 -0
- package/types/masmarino-gabarit-disclosure.d.ts +44 -0
- package/types/masmarino-gabarit-divider.d.ts +20 -0
- package/types/masmarino-gabarit-docs.d.ts +2 -1
- package/types/masmarino-gabarit-drawer.d.ts +51 -0
- package/types/masmarino-gabarit-empty-state.d.ts +67 -0
- package/types/masmarino-gabarit-file-upload.d.ts +95 -0
- package/types/masmarino-gabarit-floating-panel.d.ts +14 -0
- package/types/masmarino-gabarit-format.d.ts +54 -0
- package/types/masmarino-gabarit-funnel-chart.d.ts +78 -0
- package/types/masmarino-gabarit-gauge-bar.d.ts +54 -0
- package/types/masmarino-gabarit-git-field.d.ts +39 -0
- package/types/masmarino-gabarit-icon-marker.d.ts +47 -0
- package/types/masmarino-gabarit-icon.d.ts +23 -0
- package/types/masmarino-gabarit-input.d.ts +181 -0
- package/types/masmarino-gabarit-job-graph.d.ts +63 -0
- package/types/masmarino-gabarit-job-status.d.ts +20 -0
- package/types/masmarino-gabarit-line-chart.d.ts +153 -0
- package/types/masmarino-gabarit-list-card.d.ts +87 -0
- package/types/masmarino-gabarit-list-row.d.ts +14 -0
- package/types/masmarino-gabarit-list-toolbar.d.ts +100 -0
- package/types/masmarino-gabarit-menu.d.ts +93 -0
- package/types/masmarino-gabarit-mfa-enrollment.d.ts +142 -0
- package/types/masmarino-gabarit-mfa-settings.d.ts +89 -0
- package/types/masmarino-gabarit-modal.d.ts +60 -0
- package/types/masmarino-gabarit-nav-tabs.d.ts +65 -0
- package/types/masmarino-gabarit-notification-dot.d.ts +34 -0
- package/types/masmarino-gabarit-page-header.d.ts +20 -0
- package/types/masmarino-gabarit-page-layout.d.ts +46 -0
- package/types/masmarino-gabarit-pagination.d.ts +109 -0
- package/types/masmarino-gabarit-panel.d.ts +21 -0
- package/types/masmarino-gabarit-passkey-settings.d.ts +94 -0
- package/types/masmarino-gabarit-pie-chart.d.ts +94 -0
- package/types/masmarino-gabarit-popover.d.ts +33 -0
- package/types/masmarino-gabarit-radio-group.d.ts +66 -0
- package/types/masmarino-gabarit-save-status.d.ts +39 -0
- package/types/masmarino-gabarit-search-bar.d.ts +183 -0
- package/types/masmarino-gabarit-secret-reveal.d.ts +95 -0
- package/types/masmarino-gabarit-segmented-control.d.ts +76 -0
- package/types/masmarino-gabarit-select.d.ts +146 -0
- package/types/masmarino-gabarit-skeleton-list.d.ts +54 -0
- package/types/masmarino-gabarit-skeleton.d.ts +26 -0
- package/types/masmarino-gabarit-slider.d.ts +73 -0
- package/types/masmarino-gabarit-sparkline.d.ts +70 -0
- package/types/masmarino-gabarit-spinner.d.ts +20 -0
- package/types/masmarino-gabarit-stat-grid.d.ts +39 -0
- package/types/masmarino-gabarit-stat-tile.d.ts +79 -0
- package/types/masmarino-gabarit-stepper.d.ts +67 -0
- package/types/masmarino-gabarit-switch.d.ts +42 -0
- package/types/masmarino-gabarit-table.d.ts +60 -0
- package/types/masmarino-gabarit-tabs.d.ts +40 -0
- package/types/masmarino-gabarit-tag-input.d.ts +78 -0
- package/types/masmarino-gabarit-tag.d.ts +35 -0
- package/types/masmarino-gabarit-textarea.d.ts +109 -0
- package/types/masmarino-gabarit-timeline-chart.d.ts +145 -0
- package/types/masmarino-gabarit-toaster.d.ts +62 -0
- package/types/masmarino-gabarit-tooltip.d.ts +39 -0
- package/types/masmarino-gabarit-tree.d.ts +71 -0
- package/types/masmarino-gabarit-user-chip.d.ts +26 -0
- package/types/masmarino-gabarit.d.ts +83 -6599
- package/user-chip/README.md +42 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"masmarino-gabarit-chart.mjs","names":[],"sources":["../../../projects/gabarit/chart/primitives/scales.ts","../../../projects/gabarit/chart/chart-context/chart-context.ts","../../../projects/gabarit/chart/primitives/label.ts","../../../projects/gabarit/chart/primitives/ticks.ts","../../../projects/gabarit/chart/chart-axis/chart-axis.ts","../../../projects/gabarit/chart/chart-axis/chart-axis.html","../../../projects/gabarit/chart/chart-data/chart-data.ts","../../../projects/gabarit/chart/chart-empty/chart-empty.ts","../../../projects/gabarit/chart/chart-empty/chart-empty.html","../../../projects/gabarit/chart/primitives/nearest.ts","../../../projects/gabarit/chart/chart-frame/chart-frame.ts","../../../projects/gabarit/chart/chart-frame/chart-frame.html","../../../projects/gabarit/chart/chart-legend/chart-legend.ts","../../../projects/gabarit/chart/chart-legend/chart-legend.html","../../../projects/gabarit/chart/chart-table/chart-table.ts","../../../projects/gabarit/chart/chart-table/chart-table.html","../../../projects/gabarit/chart/chart-tooltip/chart-tooltip.ts","../../../projects/gabarit/chart/chart-tooltip/chart-tooltip.html","../../../projects/gabarit/chart/primitives/path.ts"],"sourcesContent":["export interface Scale<T> {\n map(value: T): number\n invert(pixel: number): T\n readonly domain: [T, T]\n readonly range: [number, number]\n}\n\nexport function linearScale(domain: [number, number], range: [number, number]): Scale<number> {\n const [d0, d1] = domain\n const [r0, r1] = range\n const span = d1 - d0\n\n const ratio = span === 0 ? 0 : (r1 - r0) / span\n return {\n domain,\n range,\n map: (value) => r0 + (value - d0) * ratio,\n invert: (pixel) => (ratio === 0 ? d0 : d0 + (pixel - r0) / ratio),\n }\n}\n\nexport function timeScale(domain: [Date, Date], range: [number, number]): Scale<Date> {\n const numeric = linearScale([domain[0].getTime(), domain[1].getTime()], range)\n return {\n domain,\n range,\n map: (value) => numeric.map(value.getTime()),\n invert: (pixel) => new Date(numeric.invert(pixel)),\n }\n}\n\nexport interface BandScale {\n map(value: string): number\n invert(pixel: number): string | null\n readonly bandwidth: number\n readonly domain: string[]\n readonly range: [number, number]\n}\n\nexport function bandScale(domain: string[], range: [number, number], padding = 0): BandScale {\n const [r0, r1] = range\n const step = domain.length === 0 ? 0 : (r1 - r0) / domain.length\n\n const gutter = Math.min(Math.max(padding, 0), 1)\n const bandwidth = step * (1 - gutter)\n return {\n domain,\n range,\n bandwidth,\n map: (value) => {\n const index = domain.indexOf(value)\n\n return index === -1 ? Number.NaN : r0 + index * step\n },\n invert: (pixel) => {\n if (step === 0) return null\n const index = Math.floor((pixel - r0) / step)\n return index >= 0 && index < domain.length ? domain[index] : null\n },\n }\n}\n","import { Injectable, InjectionToken, computed, signal, type Signal } from '@angular/core'\nimport { bandScale, linearScale, timeScale, type BandScale, type Scale } from '../primitives/scales'\n\nexport interface ChartMargin {\n top: number\n right: number\n bottom: number\n left: number\n}\n\nexport interface ChartBox {\n readonly width: number\n readonly height: number\n readonly margin: ChartMargin\n readonly innerWidth: number\n readonly innerHeight: number\n}\n\nexport type LinearAxisSpec = { kind: 'linear'; domain: [number, number] }\n\nexport type PointValue = number | Date | string\n\nexport type AxisSpec =\n | LinearAxisSpec\n | { kind: 'time'; domain: [Date, Date] }\n | { kind: 'band'; domain: string[]; padding?: number }\n\nconst EMPTY_BOX: ChartBox = {\n width: 0,\n height: 0,\n margin: { top: 0, right: 0, bottom: 0, left: 0 },\n innerWidth: 0,\n innerHeight: 0,\n}\n\nexport interface ChartReader {\n readonly box: Signal<ChartBox>\n readonly xSpec: Signal<AxisSpec>\n readonly ySpec: Signal<LinearAxisSpec>\n readonly xScale: Signal<Scale<number> | Scale<Date> | BandScale>\n readonly yScale: Signal<Scale<number>>\n readonly activeIndex: Signal<number | null>\n readonly pointValues: Signal<PointValue[]>\n readonly activePosition: Signal<number | null>\n}\n\nexport const CHART_CONTEXT = new InjectionToken<ChartReader>('gbt-chart-context')\n\n@Injectable()\nexport class ChartContext implements ChartReader {\n private readonly _box = signal<ChartBox>(EMPTY_BOX)\n private readonly _xSpec = signal<AxisSpec>({ kind: 'linear', domain: [0, 1] })\n private readonly _ySpec = signal<LinearAxisSpec>({ kind: 'linear', domain: [0, 1] })\n private readonly _activeIndex = signal<number | null>(null)\n private readonly _pointValues = signal<PointValue[]>([])\n\n readonly box = this._box.asReadonly()\n readonly xSpec = this._xSpec.asReadonly()\n readonly ySpec = this._ySpec.asReadonly()\n readonly activeIndex = this._activeIndex.asReadonly()\n readonly pointValues = this._pointValues.asReadonly()\n\n readonly xScale = computed<Scale<number> | Scale<Date> | BandScale>(() => {\n const spec = this._xSpec()\n const range: [number, number] = [0, this._box().innerWidth]\n if (spec.kind === 'time') return timeScale(spec.domain, range)\n if (spec.kind === 'band') return bandScale(spec.domain, range, spec.padding ?? 0)\n return linearScale(spec.domain, range)\n })\n\n readonly yScale = computed<Scale<number>>(() =>\n linearScale(this._ySpec().domain, [this._box().innerHeight, 0]),\n )\n\n readonly pointPositions = computed<number[]>(() => {\n const kind = this._xSpec().kind\n const scale = this.xScale()\n return this._pointValues().map((value) =>\n kind === 'band'\n ? (scale as BandScale).map(value as string) + (scale as BandScale).bandwidth / 2\n : (scale as Scale<number> | Scale<Date>).map(value as never),\n )\n })\n\n readonly activePosition = computed<number | null>(() => {\n const index = this._activeIndex()\n if (index === null) return null\n return this.pointPositions()[index] ?? null\n })\n\n setPointValues(values: PointValue[]): void {\n this._pointValues.set(values)\n }\n\n setGeometry(box: ChartBox): void {\n this._box.set(box)\n }\n\n setSpecs(x: AxisSpec, y: LinearAxisSpec): void {\n this._xSpec.set(x)\n this._ySpec.set(y)\n }\n\n setActiveIndex(index: number | null): void {\n this._activeIndex.set(index)\n }\n}\n","export const ESTIMATED_CHAR_WIDTH = 6.5\n\nexport const LABEL_GAP = 8\n\nexport function estimateLabelWidth(label: string): number {\n return label.length * ESTIMATED_CHAR_WIDTH\n}\n","export function niceTicks(min: number, max: number, count: number): number[] {\n if (!Number.isFinite(min) || !Number.isFinite(max)) return []\n\n if (min === max) return [min]\n\n if (max < min) return niceTicks(max, min, count)\n\n const rawStep = (max - min) / Math.max(1, count)\n const magnitude = 10 ** Math.floor(Math.log10(rawStep))\n const normalized = rawStep / magnitude\n const step = magnitude * (normalized <= 1 ? 1 : normalized <= 2 ? 2 : normalized <= 5 ? 5 : 10)\n\n const first = Math.floor(min / step) * step\n const last = Math.ceil(max / step) * step\n\n const decimals = Math.max(0, -Math.floor(Math.log10(step)))\n\n const ticks: number[] = []\n\n for (let value = first; value <= last + step / 1e9; value += step) {\n ticks.push(Number(value.toFixed(decimals)))\n }\n return ticks\n}\n\nexport type TimeUnit = 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year'\n\nexport interface TimeTicks {\n readonly values: Date[]\n readonly unit: TimeUnit\n format(date: Date, locale: string): string\n}\n\nconst SECOND = 1000\nconst MINUTE = 60 * SECOND\nconst HOUR = 60 * MINUTE\nconst DAY = 24 * HOUR\n\nconst STEPS: { ms: number; unit: TimeUnit; months?: number }[] = [\n { ms: SECOND, unit: 'second' },\n { ms: 5 * SECOND, unit: 'second' },\n { ms: 15 * SECOND, unit: 'second' },\n { ms: 30 * SECOND, unit: 'second' },\n { ms: MINUTE, unit: 'minute' },\n { ms: 5 * MINUTE, unit: 'minute' },\n { ms: 15 * MINUTE, unit: 'minute' },\n { ms: 30 * MINUTE, unit: 'minute' },\n { ms: HOUR, unit: 'hour' },\n { ms: 3 * HOUR, unit: 'hour' },\n { ms: 6 * HOUR, unit: 'hour' },\n { ms: 12 * HOUR, unit: 'hour' },\n { ms: DAY, unit: 'day' },\n { ms: 2 * DAY, unit: 'day' },\n { ms: 7 * DAY, unit: 'day' },\n { ms: 30 * DAY, unit: 'month', months: 1 },\n { ms: 90 * DAY, unit: 'month', months: 3 },\n { ms: 365 * DAY, unit: 'year', months: 12 },\n]\n\nconst FORMATS: Record<TimeUnit, Intl.DateTimeFormatOptions> = {\n second: { hour: '2-digit', minute: '2-digit', second: '2-digit' },\n minute: { hour: '2-digit', minute: '2-digit' },\n hour: { hour: '2-digit', minute: '2-digit' },\n day: { day: '2-digit', month: '2-digit' },\n month: { month: 'short', year: 'numeric' },\n year: { year: 'numeric' },\n}\n\nconst MIN_PIXELS_PER_TICK = 60\n\nexport function timeTicks(start: Date, end: Date, pixelWidth: number): TimeTicks {\n const span = end.getTime() - start.getTime()\n const makeFormatter = (unit: TimeUnit) => (date: Date, locale: string) =>\n new Intl.DateTimeFormat(locale, { ...FORMATS[unit], timeZone: 'UTC' }).format(date)\n\n if (span <= 0) {\n return { values: [start], unit: 'day', format: makeFormatter('day') }\n }\n\n const maxTicks = Math.max(2, Math.floor(pixelWidth / MIN_PIXELS_PER_TICK))\n\n const coarsest = STEPS[STEPS.length - 1]\n const chosen = STEPS.find((step) => span / step.ms + 1 <= maxTicks) ?? {\n ...coarsest,\n months: coarsest.months! * Math.max(1, Math.ceil((span / coarsest.ms + 1) / maxTicks)),\n }\n\n const values: Date[] = []\n if (chosen.months) {\n const step = chosen.months\n const cursor =\n step >= 12\n ? new Date(Date.UTC(Math.floor(start.getUTCFullYear() / (step / 12)) * (step / 12), 0, 1))\n : new Date(\n Date.UTC(start.getUTCFullYear(), Math.floor(start.getUTCMonth() / step) * step, 1),\n )\n while (cursor.getTime() < start.getTime()) cursor.setUTCMonth(cursor.getUTCMonth() + step)\n while (cursor.getTime() <= end.getTime()) {\n values.push(new Date(cursor))\n cursor.setUTCMonth(cursor.getUTCMonth() + step)\n }\n } else {\n const first = Math.ceil(start.getTime() / chosen.ms) * chosen.ms\n for (let t = first; t <= end.getTime(); t += chosen.ms) {\n values.push(new Date(t))\n }\n }\n\n if (values.length === 0) values.push(start)\n\n return { values, unit: chosen.unit, format: makeFormatter(chosen.unit) }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n inject,\n input,\n} from '@angular/core'\nimport { CHART_CONTEXT, type ChartReader } from '../chart-context/chart-context'\nimport { LABEL_GAP, estimateLabelWidth } from '../primitives/label'\nimport { formatCompact } from '@masmarino/gabarit/format'\nimport { niceTicks, timeTicks } from '../primitives/ticks'\nimport { type BandScale, type Scale } from '../primitives/scales'\n\ninterface Tick {\n key: string\n x: number\n y: number\n label: string\n\n date: string | null\n anchor: 'start' | 'middle' | 'end'\n}\n\n@Component({\n selector: 'g[gbtChartAxis]',\n standalone: true,\n imports: [],\n templateUrl: './chart-axis.html',\n styleUrl: './chart-axis.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.transform]': 'groupTransform()',\n '[attr.axis]': 'axis()',\n 'aria-hidden': 'true',\n },\n})\nexport class ChartAxis {\n private readonly context: ChartReader = inject(CHART_CONTEXT)\n\n axis = input.required<'x' | 'y'>()\n locale = input.required<string>()\n tickCount = input(5)\n format = input<((value: never) => string) | null>(null)\n grid = input(false, { transform: booleanAttribute })\n\n protected readonly groupTransform = computed(() => {\n const box = this.context.box()\n\n return this.axis() === 'x' ? `translate(0,${box.innerHeight})` : 'translate(0,0)'\n })\n\n protected readonly ticks = computed<Tick[]>(() => {\n if (this.axis() === 'y') return this.yTicks()\n const ticks = this.xTicks()\n\n if (this.context.xSpec().kind === 'band') return ticks\n\n const last = ticks.length - 1\n return ticks.map((tick, index) => ({\n ...tick,\n anchor: index === 0 ? 'start' : index === last ? 'end' : 'middle',\n }))\n })\n\n protected readonly gridLines = computed<number[]>(() => {\n if (!this.grid() || this.axis() !== 'y') return []\n return this.yTicks().map((tick) => tick.y - 4)\n })\n\n protected readonly innerWidth = computed(() => this.context.box().innerWidth)\n\n private yTicks(): Tick[] {\n const spec = this.context.ySpec()\n const scale = this.context.yScale()\n const custom = this.format()\n return niceTicks(spec.domain[0], spec.domain[1], this.tickCount()).map((value) => ({\n key: `y-${value}`,\n x: -8,\n y: scale.map(value) + 4,\n label: custom ? custom(value as never) : formatCompact(value, this.locale()),\n date: null,\n anchor: 'end',\n }))\n }\n\n private xTicks(): Tick[] {\n const spec = this.context.xSpec()\n const box = this.context.box()\n const custom = this.format()\n\n if (spec.kind === 'band') {\n const scale = this.context.xScale() as BandScale\n\n const labels = spec.domain.map((category) => (custom ? custom(category as never) : category))\n const step = spec.domain.length === 0 ? 0 : box.innerWidth / spec.domain.length\n const widest = labels.reduce((large, label) => Math.max(large, estimateLabelWidth(label)), 0)\n const keepEvery = Math.max(1, Math.ceil((widest + LABEL_GAP) / Math.max(step, 1)))\n\n return spec.domain\n .map((category, index) => ({\n key: `x-${category}`,\n x: scale.map(category) + scale.bandwidth / 2,\n y: 20,\n label: labels[index],\n date: null,\n anchor: 'middle' as const,\n }))\n .filter((_, index) => index % keepEvery === 0)\n }\n\n if (spec.kind === 'time') {\n const scale = this.context.xScale() as Scale<Date>\n const result = timeTicks(spec.domain[0], spec.domain[1], box.innerWidth)\n\n const fine = result.unit === 'hour' || result.unit === 'minute' || result.unit === 'second'\n const days = new Set(result.values.map((v) => v.toISOString().slice(0, 10)))\n const multiDay = days.size > 1\n const seen = new Set<string>()\n\n return result.values.map((value) => {\n const day = value.toISOString().slice(0, 10)\n\n const first = fine && multiDay && !seen.has(day)\n seen.add(day)\n\n return {\n key: `x-${value.getTime()}`,\n x: scale.map(value),\n y: first ? 14 : 20,\n label: custom ? custom(value as never) : result.format(value, this.locale()),\n date: first\n ? new Intl.DateTimeFormat(this.locale(), {\n day: '2-digit',\n month: '2-digit',\n timeZone: 'UTC',\n }).format(value)\n : null,\n anchor: 'middle',\n }\n })\n }\n\n const scale = this.context.xScale() as Scale<number>\n return niceTicks(spec.domain[0], spec.domain[1], this.tickCount()).map((value) => ({\n key: `x-${value}`,\n x: scale.map(value),\n y: 20,\n label: custom ? custom(value as never) : formatCompact(value, this.locale()),\n date: null,\n anchor: 'middle',\n }))\n }\n}\n","@for (y of gridLines(); track $index) {\n <svg:line\n class=\"gbt-chart-axis__grid\"\n x1=\"0\"\n [attr.x2]=\"innerWidth()\"\n [attr.y1]=\"y\"\n [attr.y2]=\"y\"\n />\n}\n@for (tick of ticks(); track tick.key) {\n <svg:text\n class=\"gbt-chart-axis__label\"\n [attr.x]=\"tick.x\"\n [attr.y]=\"tick.y\"\n [attr.text-anchor]=\"tick.anchor\"\n >\n @if (tick.date) {\n <svg:tspan [attr.x]=\"tick.x\" dy=\"0\">{{ tick.label }}</svg:tspan>\n <svg:tspan [attr.x]=\"tick.x\" dy=\"1.1em\">{{ tick.date }}</svg:tspan>\n } @else {\n {{ tick.label }}\n }\n </svg:text>\n}\n","import { niceTicks } from '../primitives/ticks'\n\nexport interface ChartPoint<X> {\n x: X\n y: number\n\n display?: string\n}\n\nexport interface ChartSeries<X> {\n label: string\n points: ChartPoint<X>[]\n\n pattern?: 'solid' | 'dashed' | 'dotted'\n}\n\nexport interface ChartInterval {\n start: Date\n end: Date\n label: string\n}\n\nconst DAY = 86400000\n\nexport function yDomain<X>(series: ChartSeries<X>[], includeZero: boolean): [number, number] {\n const values = series.flatMap((s) => s.points.map((p) => p.y))\n\n if (values.length === 0) return [0, 1]\n\n let min = Math.min(...values)\n let max = Math.max(...values)\n if (includeZero) {\n min = Math.min(min, 0)\n max = Math.max(max, 0)\n }\n\n if (min === max) return [min, min + 1]\n return [min, max]\n}\n\nexport function numericXDomain(series: ChartSeries<number>[]): [number, number] {\n const values = series.flatMap((s) => s.points.map((p) => p.x))\n if (values.length === 0) return [0, 1]\n const min = Math.min(...values)\n const max = Math.max(...values)\n return min === max ? [min, min + 1] : [min, max]\n}\n\nexport function timeXDomain(series: ChartSeries<Date>[]): [Date, Date] {\n const values = series.flatMap((s) => s.points.map((p) => p.x.getTime()))\n\n if (values.length === 0) return [new Date(-DAY), new Date(0)]\n const min = Math.min(...values)\n const max = Math.max(...values)\n return min === max ? [new Date(min), new Date(min + DAY)] : [new Date(min), new Date(max)]\n}\n\nexport function longestSeriesLength<X>(series: ChartSeries<X>[]): number {\n return series.reduce((longest, s) => Math.max(longest, s.points.length), 0)\n}\n\nexport function niceYDomain<X>(\n series: ChartSeries<X>[],\n includeZero: boolean,\n tickCount: number,\n): [number, number] {\n const [min, max] = yDomain(series, includeZero)\n const ticks = niceTicks(min, max, tickCount)\n\n if (ticks.length === 0) return [min, max]\n return [ticks[0], ticks[ticks.length - 1]]\n}\n\nexport function niceXDomain(series: ChartSeries<number>[], tickCount: number): [number, number] {\n const [min, max] = numericXDomain(series)\n const ticks = niceTicks(min, max, tickCount)\n if (ticks.length === 0) return [min, max]\n return [ticks[0], ticks[ticks.length - 1]]\n}\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core'\n\n@Component({\n selector: 'gbt-chart-empty',\n standalone: true,\n imports: [],\n templateUrl: './chart-empty.html',\n styleUrl: './chart-empty.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartEmpty {\n message = input.required<string>()\n actionLabel = input<string>('')\n\n action = output<void>()\n}\n","<div class=\"gbt-chart-empty\" role=\"status\">\n <div class=\"gbt-chart-empty__icon\" aria-hidden=\"true\">\n <ng-content select=\"[gbtChartEmptyIcon]\" />\n </div>\n <p class=\"gbt-chart-empty__message\">{{ message() }}</p>\n @if (actionLabel()) {\n <button type=\"button\" class=\"gbt-chart-empty__action\" (click)=\"action.emit()\">\n {{ actionLabel() }}\n </button>\n }\n</div>\n","export function nearestIndex(sorted: number[], target: number): number {\n if (sorted.length === 0) return -1\n\n let low = 0\n let high = sorted.length - 1\n while (low < high) {\n const mid = (low + high) >> 1\n if (sorted[mid] < target) low = mid + 1\n else high = mid\n }\n\n const previous = low - 1\n if (previous < 0) return low\n return target - sorted[previous] <= sorted[low] - target ? previous : low\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core'\nimport {\n CHART_CONTEXT,\n ChartContext,\n type AxisSpec,\n type ChartMargin,\n type LinearAxisSpec,\n type PointValue,\n} from '../chart-context/chart-context'\nimport { nearestIndex } from '../primitives/nearest'\n\nconst DEFAULT_MARGIN: ChartMargin = { top: 16, right: 8, bottom: 32, left: 48 }\n\n@Component({\n selector: 'gbt-chart-frame',\n standalone: true,\n imports: [],\n templateUrl: './chart-frame.html',\n styleUrl: './chart-frame.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ChartContext, { provide: CHART_CONTEXT, useExisting: ChartContext }],\n})\nexport class ChartFrame {\n private readonly context = inject(ChartContext)\n\n label = input.required<string>()\n heading = input('')\n headingLevel = input<1 | 2 | 3 | 4 | 5 | 6>(2)\n headline = input('')\n trend = input('')\n x = input.required<AxisSpec>()\n y = input.required<LinearAxisSpec>()\n margin = input<Partial<ChartMargin>>({})\n size = input<{ width: number; height: number } | null>(null)\n pointValues = input<PointValue[]>([])\n\n readonly activeIndexChange = output<number | null>()\n\n private readonly surface = viewChild.required<ElementRef<HTMLElement>>('surface')\n private readonly measured = signal<{ width: number; height: number } | null>(null)\n\n protected readonly ready = computed(() => this.context.box().innerWidth > 0)\n\n protected readonly viewBox = computed(() => {\n const b = this.context.box()\n return `0 0 ${b.width} ${b.height}`\n })\n\n protected readonly innerTransform = computed(() => {\n const m = this.context.box().margin\n return `translate(${m.left},${m.top})`\n })\n\n protected readonly activePosition = computed(() => this.context.activePosition())\n protected readonly innerHeight = computed(() => this.context.box().innerHeight)\n\n constructor() {\n effect(() => this.activeIndexChange.emit(this.context.activeIndex()))\n\n effect(() => {\n const margin = { ...DEFAULT_MARGIN, ...this.margin() }\n const size = this.size() ?? this.measured()\n const width = size?.width ?? 0\n const height = size?.height ?? 0\n this.context.setSpecs(this.x(), this.y())\n this.context.setPointValues(this.pointValues())\n this.context.setGeometry({\n width,\n height,\n margin,\n innerWidth: Math.max(0, width - margin.left - margin.right),\n innerHeight: Math.max(0, height - margin.top - margin.bottom),\n })\n })\n\n effect((onCleanup) => {\n if (this.size() || typeof ResizeObserver === 'undefined') return\n\n const element = this.surface().nativeElement\n const observer = new ResizeObserver((entries) => {\n const rect = entries[0]?.contentRect\n if (rect) this.measured.set({ width: rect.width, height: rect.height })\n })\n observer.observe(element)\n onCleanup(() => observer.disconnect())\n })\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const count = this.pointValues().length\n if (count === 0) return\n\n const current = this.context.activeIndex()\n const last = count - 1\n\n switch (event.key) {\n case 'ArrowRight':\n this.context.setActiveIndex(current === null ? 0 : Math.min(last, current + 1))\n break\n case 'ArrowLeft':\n this.context.setActiveIndex(current === null ? last : Math.max(0, current - 1))\n break\n case 'Home':\n this.context.setActiveIndex(0)\n break\n case 'End':\n this.context.setActiveIndex(last)\n break\n case 'Escape':\n this.context.setActiveIndex(null)\n break\n default:\n return\n }\n\n event.preventDefault()\n }\n\n protected onBlur(): void {\n this.context.setActiveIndex(null)\n }\n\n protected onPointerMove(event: PointerEvent | MouseEvent): void {\n const positions = this.context.pointPositions()\n if (positions.length === 0) return\n\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect()\n const local = event.clientX - rect.left - this.context.box().margin.left\n\n this.context.setActiveIndex(nearestIndex(positions, local))\n }\n\n protected onPointerLeave(event: PointerEvent | MouseEvent): void {\n const surface = event.currentTarget as HTMLElement\n if (surface.ownerDocument.activeElement === surface) return\n this.context.setActiveIndex(null)\n }\n}\n","<div class=\"gbt-chart-frame\">\n @if (heading()) {\n <div class=\"gbt-chart-frame__header\">\n @switch (headingLevel()) {\n @case (1) {\n <h1 class=\"gbt-chart-frame__title\">{{ heading() }}</h1>\n }\n @case (3) {\n <h3 class=\"gbt-chart-frame__title\">{{ heading() }}</h3>\n }\n @case (4) {\n <h4 class=\"gbt-chart-frame__title\">{{ heading() }}</h4>\n }\n @case (5) {\n <h5 class=\"gbt-chart-frame__title\">{{ heading() }}</h5>\n }\n @case (6) {\n <h6 class=\"gbt-chart-frame__title\">{{ heading() }}</h6>\n }\n @default {\n <h2 class=\"gbt-chart-frame__title\">{{ heading() }}</h2>\n }\n }\n @if (headline()) {\n <p class=\"gbt-chart-frame__headline\">{{ headline() }}</p>\n }\n @if (trend()) {\n <p class=\"gbt-chart-frame__trend\">{{ trend() }}</p>\n }\n </div>\n }\n\n <div\n #surface\n class=\"gbt-chart-frame__surface\"\n [attr.tabindex]=\"ready() && pointValues().length > 0 ? 0 : null\"\n [attr.role]=\"ready() ? 'group' : null\"\n [attr.aria-label]=\"ready() ? label() : null\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur()\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerleave)=\"onPointerLeave($event)\"\n >\n @if (ready()) {\n <svg\n class=\"gbt-chart-frame__svg\"\n [attr.viewBox]=\"viewBox()\"\n role=\"presentation\"\n focusable=\"false\"\n >\n <g [attr.transform]=\"innerTransform()\">\n <ng-content select=\"[gbtChartLayer]\" />\n @if (activePosition() !== null) {\n <line\n class=\"gbt-chart-frame__guide\"\n [attr.x1]=\"activePosition()\"\n [attr.x2]=\"activePosition()\"\n y1=\"0\"\n [attr.y2]=\"innerHeight()\"\n aria-hidden=\"true\"\n />\n }\n </g>\n </svg>\n <ng-content select=\"gbt-chart-tooltip\" />\n }\n </div>\n <ng-content select=\"gbt-chart-empty\" />\n <ng-content select=\"gbt-chart-table\" />\n</div>\n","import { ChangeDetectionStrategy, Component, booleanAttribute, input, output } from '@angular/core'\n\nexport interface LegendEntry {\n label: string\n\n pattern?: 'solid' | 'dashed' | 'dotted'\n\n color?: string\n\n value?: string\n}\n\nconst DASH_ARRAYS: Record<NonNullable<LegendEntry['pattern']>, string> = {\n solid: 'none',\n dashed: '6 3',\n dotted: '1 3',\n}\n\n@Component({\n selector: 'gbt-chart-legend',\n standalone: true,\n imports: [],\n templateUrl: './chart-legend.html',\n styleUrl: './chart-legend.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartLegend {\n entries = input.required<LegendEntry[]>()\n\n interactive = input(false, { transform: booleanAttribute })\n activeIndex = input<number | null>(null)\n activeIndexChange = output<number | null>()\n\n protected dashArray(pattern: LegendEntry['pattern']): string {\n return DASH_ARRAYS[pattern ?? 'solid']\n }\n\n protected onMouseLeave(event: MouseEvent): void {\n const target = event.currentTarget as HTMLElement\n if (target.ownerDocument.activeElement === target) return\n this.activeIndexChange.emit(null)\n }\n}\n","<ul class=\"gbt-chart-legend\">\n @for (entry of entries(); track $index) {\n <li\n class=\"gbt-chart-legend__item\"\n [class.gbt-chart-legend__item--active]=\"interactive() && activeIndex() === $index\"\n [attr.data-pattern]=\"entry.pattern ?? 'solid'\"\n [attr.tabindex]=\"interactive() ? 0 : null\"\n (mouseenter)=\"interactive() && activeIndexChange.emit($index)\"\n (mouseleave)=\"interactive() && onMouseLeave($event)\"\n (focus)=\"interactive() && activeIndexChange.emit($index)\"\n (blur)=\"interactive() && activeIndexChange.emit(null)\"\n >\n <svg class=\"gbt-chart-legend__swatch\" viewBox=\"0 0 24 8\" aria-hidden=\"true\" focusable=\"false\">\n @if (entry.color; as color) {\n <rect\n class=\"gbt-chart-legend__fill\"\n x=\"4\"\n y=\"0\"\n width=\"8\"\n height=\"8\"\n rx=\"2\"\n [attr.fill]=\"color\"\n />\n } @else {\n <line\n class=\"gbt-chart-legend__line\"\n x1=\"0\"\n y1=\"4\"\n x2=\"24\"\n y2=\"4\"\n [attr.stroke-dasharray]=\"dashArray(entry.pattern)\"\n stroke-width=\"2\"\n />\n }\n </svg>\n {{ entry.label }}\n @if (entry.value; as value) {\n <span class=\"gbt-chart-legend__value\">{{ value }}</span>\n }\n </li>\n }\n</ul>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core'\n\n@Component({\n selector: 'gbt-chart-table',\n standalone: true,\n imports: [],\n templateUrl: './chart-table.html',\n styleUrl: './chart-table.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartTable {\n caption = input.required<string>()\n columns = input.required<string[]>()\n rows = input.required<(string | number)[][]>()\n}\n","<div class=\"gbt-sr-only\">\n <table>\n <caption>\n {{\n caption()\n }}\n </caption>\n <thead>\n <tr>\n @for (column of columns(); track column) {\n <th scope=\"col\">{{ column }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of rows(); track $index) {\n <tr>\n @for (cell of row; track $index) {\n <td>{{ cell }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n</div>\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core'\nimport { CHART_CONTEXT } from '../chart-context/chart-context'\n\nexport interface TooltipRow {\n label: string\n value: string\n\n series?: 1 | 2 | 3\n\n pattern?: 'solid' | 'dashed' | 'dotted'\n}\n\nexport interface TooltipPoint<X> {\n x: X\n\n header: string\n rows: TooltipRow[]\n}\n\n@Component({\n selector: 'gbt-chart-tooltip',\n standalone: true,\n imports: [],\n templateUrl: './chart-tooltip.html',\n styleUrl: './chart-tooltip.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartTooltip<X> {\n private readonly context = inject(CHART_CONTEXT)\n\n points = input.required<TooltipPoint<X>[]>()\n\n protected readonly active = computed<TooltipPoint<X> | null>(() => {\n const index = this.context.activeIndex()\n if (index === null) return null\n return this.points()[index] ?? null\n })\n\n protected readonly left = computed(() => {\n const position = this.context.activePosition()\n if (position === null) return 0\n return position + this.context.box().margin.left\n })\n\n protected readonly anchor = computed<'start' | 'middle' | 'end'>(() => {\n const index = this.context.activeIndex()\n if (index === null) return 'middle'\n const last = this.context.pointValues().length - 1\n return index === 0 ? 'start' : index === last ? 'end' : 'middle'\n })\n}\n","<div class=\"gbt-chart-tooltip\" role=\"status\" aria-live=\"polite\">\n @if (active(); as point) {\n <div class=\"gbt-chart-tooltip__panel\" [style.left.px]=\"left()\" [attr.data-anchor]=\"anchor()\">\n <p class=\"gbt-chart-tooltip__header\">{{ point.header }}</p>\n <ul class=\"gbt-chart-tooltip__rows\">\n @for (row of point.rows; track $index) {\n <li>\n <span\n class=\"gbt-chart-tooltip__swatch\"\n [attr.data-series]=\"row.series ?? null\"\n [attr.data-pattern]=\"row.pattern ?? 'solid'\"\n aria-hidden=\"true\"\n ></span>\n <span class=\"gbt-chart-tooltip__label\">{{ row.label }}</span>\n <span class=\"gbt-chart-tooltip__value\">{{ row.value }}</span>\n </li>\n }\n </ul>\n </div>\n }\n</div>\n","export interface Point {\n x: number\n y: number\n}\n\nconst round = (n: number): number => Number(n.toFixed(2))\n\nexport function linePath(points: Point[]): string {\n if (points.length === 0) return ''\n return points\n .map((point, index) => `${index === 0 ? 'M' : 'L'}${round(point.x)},${round(point.y)}`)\n .join('')\n}\n\nexport function areaPath(points: Point[], baseline: number): string {\n if (points.length === 0) return ''\n const last = points[points.length - 1]\n const first = points[0]\n return `${linePath(points)}L${round(last.x)},${round(baseline)}L${round(first.x)},${round(baseline)}Z`\n}\n\nexport interface Arc {\n startAngle: number\n endAngle: number\n innerRadius: number\n outerRadius: number\n}\n\nfunction arcPoint(radius: number, angle: number): Point {\n return { x: radius * Math.sin(angle), y: -radius * Math.cos(angle) }\n}\n\nfunction point(p: Point): string {\n return `${round(p.x)},${round(p.y)}`\n}\n\nconst FULL_CIRCLE = Math.PI * 2\n\nexport function arcPath(arc: Arc): string {\n const { startAngle, endAngle, innerRadius, outerRadius } = arc\n const span = endAngle - startAngle\n if (span <= 0) return ''\n if (span >= FULL_CIRCLE - 1e-9) {\n const mid = startAngle + Math.PI\n return (\n arcPath({ startAngle, endAngle: mid, innerRadius, outerRadius }) +\n arcPath({ startAngle: mid, endAngle: startAngle + FULL_CIRCLE, innerRadius, outerRadius })\n )\n }\n\n const largeArc = span > Math.PI ? 1 : 0\n const outerStart = arcPoint(outerRadius, startAngle)\n const outerEnd = arcPoint(outerRadius, endAngle)\n const outerArc = `A${round(outerRadius)},${round(outerRadius)} 0 ${largeArc},1 ${point(outerEnd)}`\n\n if (innerRadius <= 0) {\n return `M0,0L${point(outerStart)}${outerArc}Z`\n }\n\n const innerStart = arcPoint(innerRadius, startAngle)\n const innerEnd = arcPoint(innerRadius, endAngle)\n const innerArc = `A${round(innerRadius)},${round(innerRadius)} 0 ${largeArc},0 ${point(innerStart)}`\n return `M${point(outerStart)}${outerArc}L${point(innerEnd)}${innerArc}Z`\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import { ChangeDetectionStrategy, Component, booleanAttribute, computed, forwardRef, input, model, signal } from "@angular/core";
|
|
3
|
+
import { NG_VALUE_ACCESSOR } from "@angular/forms";
|
|
4
|
+
import { Checkbox } from "@masmarino/gabarit/checkbox";
|
|
5
|
+
let nextCheckboxGroupId = 0;
|
|
6
|
+
var CheckboxGroup = class CheckboxGroup {
|
|
7
|
+
id = input(`gbt-checkbox-group-${++nextCheckboxGroupId}`, ...ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []);
|
|
8
|
+
legend = input.required(...ngDevMode ? [{ debugName: "legend" }] : /* istanbul ignore next */ []);
|
|
9
|
+
hideLegend = input(false, {
|
|
10
|
+
...ngDevMode ? { debugName: "hideLegend" } : /* istanbul ignore next */ {},
|
|
11
|
+
transform: booleanAttribute
|
|
12
|
+
});
|
|
13
|
+
options = input([], ...ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []);
|
|
14
|
+
groups = input([], ...ngDevMode ? [{ debugName: "groups" }] : /* istanbul ignore next */ []);
|
|
15
|
+
columns = input(1, ...ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []);
|
|
16
|
+
disabled = input(false, {
|
|
17
|
+
...ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {},
|
|
18
|
+
transform: booleanAttribute
|
|
19
|
+
});
|
|
20
|
+
required = input(false, {
|
|
21
|
+
...ngDevMode ? { debugName: "required" } : /* istanbul ignore next */ {},
|
|
22
|
+
transform: booleanAttribute
|
|
23
|
+
});
|
|
24
|
+
hint = input("", ...ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []);
|
|
25
|
+
errorMessage = input(null, ...ngDevMode ? [{ debugName: "errorMessage" }] : /* istanbul ignore next */ []);
|
|
26
|
+
value = model([], ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
|
|
27
|
+
formDisabled = signal(false, ...ngDevMode ? [{ debugName: "formDisabled" }] : /* istanbul ignore next */ []);
|
|
28
|
+
isDisabled = computed(() => this.disabled() || this.formDisabled(), ...ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []);
|
|
29
|
+
hintId = computed(() => `${this.id()}-hint`, ...ngDevMode ? [{ debugName: "hintId" }] : /* istanbul ignore next */ []);
|
|
30
|
+
errorId = computed(() => `${this.id()}-error`, ...ngDevMode ? [{ debugName: "errorId" }] : /* istanbul ignore next */ []);
|
|
31
|
+
showHint = computed(() => !!this.hint() && !this.errorMessage(), ...ngDevMode ? [{ debugName: "showHint" }] : /* istanbul ignore next */ []);
|
|
32
|
+
describedBy = computed(() => {
|
|
33
|
+
if (this.errorMessage()) return this.errorId();
|
|
34
|
+
return this.showHint() ? this.hintId() : null;
|
|
35
|
+
}, ...ngDevMode ? [{ debugName: "describedBy" }] : /* istanbul ignore next */ []);
|
|
36
|
+
sections = computed(() => {
|
|
37
|
+
const id = this.id();
|
|
38
|
+
const result = [];
|
|
39
|
+
const flat = this.options();
|
|
40
|
+
if (flat.length > 0) result.push({
|
|
41
|
+
key: "options",
|
|
42
|
+
label: null,
|
|
43
|
+
labelId: "",
|
|
44
|
+
items: flat.map((option, i) => ({
|
|
45
|
+
id: `${id}-${i}`,
|
|
46
|
+
option
|
|
47
|
+
}))
|
|
48
|
+
});
|
|
49
|
+
this.groups().forEach((group, g) => {
|
|
50
|
+
result.push({
|
|
51
|
+
key: `group-${g}`,
|
|
52
|
+
label: group.label,
|
|
53
|
+
labelId: `${id}-group-${g}`,
|
|
54
|
+
items: group.options.map((option, i) => ({
|
|
55
|
+
id: `${id}-g${g}-${i}`,
|
|
56
|
+
option
|
|
57
|
+
}))
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
return result;
|
|
61
|
+
}, ...ngDevMode ? [{ debugName: "sections" }] : /* istanbul ignore next */ []);
|
|
62
|
+
sectioned = computed(() => this.sections().some((s) => s.label !== null), ...ngDevMode ? [{ debugName: "sectioned" }] : /* istanbul ignore next */ []);
|
|
63
|
+
gridColumns = computed(() => {
|
|
64
|
+
const columns = this.columns();
|
|
65
|
+
if (columns === "auto") return "repeat(auto-fill, minmax(11rem, 1fr))";
|
|
66
|
+
const count = Math.max(1, Math.floor(columns));
|
|
67
|
+
return count === 1 ? null : `repeat(${count}, minmax(0, 1fr))`;
|
|
68
|
+
}, ...ngDevMode ? [{ debugName: "gridColumns" }] : /* istanbul ignore next */ []);
|
|
69
|
+
onChange = () => {};
|
|
70
|
+
onTouched = () => {};
|
|
71
|
+
writeValue(value) {
|
|
72
|
+
this.value.set(Array.isArray(value) ? [...value] : []);
|
|
73
|
+
}
|
|
74
|
+
registerOnChange(fn) {
|
|
75
|
+
this.onChange = fn;
|
|
76
|
+
}
|
|
77
|
+
registerOnTouched(fn) {
|
|
78
|
+
this.onTouched = fn;
|
|
79
|
+
}
|
|
80
|
+
setDisabledState(isDisabled) {
|
|
81
|
+
this.formDisabled.set(isDisabled);
|
|
82
|
+
}
|
|
83
|
+
isChecked(value) {
|
|
84
|
+
return this.value().includes(value);
|
|
85
|
+
}
|
|
86
|
+
setChecked(value, checked) {
|
|
87
|
+
const current = this.value();
|
|
88
|
+
if (current.includes(value) === checked) return;
|
|
89
|
+
const next = checked ? [...current, value] : current.filter((v) => v !== value);
|
|
90
|
+
const order = this.sections().flatMap((s) => s.items.map((item) => item.option.value));
|
|
91
|
+
const rank = (v) => {
|
|
92
|
+
const index = order.indexOf(v);
|
|
93
|
+
return index === -1 ? order.length : index;
|
|
94
|
+
};
|
|
95
|
+
next.sort((a, b) => rank(a) - rank(b));
|
|
96
|
+
this.value.set(next);
|
|
97
|
+
this.onChange(next);
|
|
98
|
+
this.onTouched();
|
|
99
|
+
}
|
|
100
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
101
|
+
minVersion: "12.0.0",
|
|
102
|
+
version: "22.2.0",
|
|
103
|
+
ngImport: i0,
|
|
104
|
+
type: CheckboxGroup,
|
|
105
|
+
deps: [],
|
|
106
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
107
|
+
});
|
|
108
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
109
|
+
minVersion: "17.0.0",
|
|
110
|
+
version: "22.2.0",
|
|
111
|
+
type: CheckboxGroup,
|
|
112
|
+
isStandalone: true,
|
|
113
|
+
selector: "gbt-checkbox-group",
|
|
114
|
+
inputs: {
|
|
115
|
+
id: {
|
|
116
|
+
classPropertyName: "id",
|
|
117
|
+
publicName: "id",
|
|
118
|
+
isSignal: true,
|
|
119
|
+
isRequired: false,
|
|
120
|
+
transformFunction: null
|
|
121
|
+
},
|
|
122
|
+
legend: {
|
|
123
|
+
classPropertyName: "legend",
|
|
124
|
+
publicName: "legend",
|
|
125
|
+
isSignal: true,
|
|
126
|
+
isRequired: true,
|
|
127
|
+
transformFunction: null
|
|
128
|
+
},
|
|
129
|
+
hideLegend: {
|
|
130
|
+
classPropertyName: "hideLegend",
|
|
131
|
+
publicName: "hideLegend",
|
|
132
|
+
isSignal: true,
|
|
133
|
+
isRequired: false,
|
|
134
|
+
transformFunction: null
|
|
135
|
+
},
|
|
136
|
+
options: {
|
|
137
|
+
classPropertyName: "options",
|
|
138
|
+
publicName: "options",
|
|
139
|
+
isSignal: true,
|
|
140
|
+
isRequired: false,
|
|
141
|
+
transformFunction: null
|
|
142
|
+
},
|
|
143
|
+
groups: {
|
|
144
|
+
classPropertyName: "groups",
|
|
145
|
+
publicName: "groups",
|
|
146
|
+
isSignal: true,
|
|
147
|
+
isRequired: false,
|
|
148
|
+
transformFunction: null
|
|
149
|
+
},
|
|
150
|
+
columns: {
|
|
151
|
+
classPropertyName: "columns",
|
|
152
|
+
publicName: "columns",
|
|
153
|
+
isSignal: true,
|
|
154
|
+
isRequired: false,
|
|
155
|
+
transformFunction: null
|
|
156
|
+
},
|
|
157
|
+
disabled: {
|
|
158
|
+
classPropertyName: "disabled",
|
|
159
|
+
publicName: "disabled",
|
|
160
|
+
isSignal: true,
|
|
161
|
+
isRequired: false,
|
|
162
|
+
transformFunction: null
|
|
163
|
+
},
|
|
164
|
+
required: {
|
|
165
|
+
classPropertyName: "required",
|
|
166
|
+
publicName: "required",
|
|
167
|
+
isSignal: true,
|
|
168
|
+
isRequired: false,
|
|
169
|
+
transformFunction: null
|
|
170
|
+
},
|
|
171
|
+
hint: {
|
|
172
|
+
classPropertyName: "hint",
|
|
173
|
+
publicName: "hint",
|
|
174
|
+
isSignal: true,
|
|
175
|
+
isRequired: false,
|
|
176
|
+
transformFunction: null
|
|
177
|
+
},
|
|
178
|
+
errorMessage: {
|
|
179
|
+
classPropertyName: "errorMessage",
|
|
180
|
+
publicName: "errorMessage",
|
|
181
|
+
isSignal: true,
|
|
182
|
+
isRequired: false,
|
|
183
|
+
transformFunction: null
|
|
184
|
+
},
|
|
185
|
+
value: {
|
|
186
|
+
classPropertyName: "value",
|
|
187
|
+
publicName: "value",
|
|
188
|
+
isSignal: true,
|
|
189
|
+
isRequired: false,
|
|
190
|
+
transformFunction: null
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
outputs: { value: "valueChange" },
|
|
194
|
+
providers: [{
|
|
195
|
+
provide: NG_VALUE_ACCESSOR,
|
|
196
|
+
useExisting: forwardRef(() => CheckboxGroup),
|
|
197
|
+
multi: true
|
|
198
|
+
}],
|
|
199
|
+
ngImport: i0,
|
|
200
|
+
template: "<fieldset\n class=\"gbt-checkbox-group\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <legend\n class=\"gbt-checkbox-group__legend\"\n [class.gbt-checkbox-group__legend--hidden]=\"hideLegend()\"\n >\n {{ legend() }}{{ required() ? ' *' : '' }}\n </legend>\n @if (showHint()) {\n <p [id]=\"hintId()\" class=\"gbt-checkbox-group__hint\">{{ hint() }}</p>\n }\n <div\n class=\"gbt-checkbox-group__sections\"\n [style.grid-template-columns]=\"sectioned() ? gridColumns() : null\"\n >\n @for (section of sections(); track section.key) {\n <div\n class=\"gbt-checkbox-group__section\"\n [attr.role]=\"section.label ? 'group' : null\"\n [attr.aria-labelledby]=\"section.label ? section.labelId : null\"\n >\n @if (section.label) {\n <p [id]=\"section.labelId\" class=\"gbt-checkbox-group__group-label\">{{ section.label }}</p>\n }\n <div\n class=\"gbt-checkbox-group__list\"\n [style.grid-template-columns]=\"sectioned() ? null : gridColumns()\"\n >\n @for (item of section.items; track item.id) {\n <gbt-checkbox\n [id]=\"item.id\"\n [label]=\"item.option.label\"\n [hint]=\"item.option.hint ?? ''\"\n [disabled]=\"isDisabled() || !!item.option.disabled\"\n [checked]=\"isChecked(item.option.value)\"\n (checkedChange)=\"setChecked(item.option.value, $event)\"\n />\n }\n </div>\n </div>\n }\n </div>\n @if (errorMessage()) {\n <p [id]=\"errorId()\" class=\"gbt-checkbox-group__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</fieldset>\n",
|
|
201
|
+
styles: [":host{display:block}.gbt-checkbox-group{display:flex;flex-direction:column;gap:.75rem;min-width:0;margin:0;padding:0;border:none}.gbt-checkbox-group__legend{padding:0;font-size:.8125rem;font-weight:600;color:var(--text-secondary)}.gbt-checkbox-group__legend--hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.gbt-checkbox-group__hint,.gbt-checkbox-group__error{margin:0;font-size:.75rem}.gbt-checkbox-group__hint{color:var(--text-secondary)}.gbt-checkbox-group__error{color:var(--color-error-text)}.gbt-checkbox-group__sections,.gbt-checkbox-group__list{display:grid;grid-template-columns:minmax(0,1fr)}.gbt-checkbox-group__sections{gap:1rem 1.5rem}.gbt-checkbox-group__list{gap:.5rem 1.5rem;justify-items:start}.gbt-checkbox-group__section{display:flex;flex-direction:column;gap:.375rem;min-width:0}.gbt-checkbox-group__group-label{margin:0 0 .125rem;font-size:.8125rem;font-weight:600;line-height:1.25rem;color:var(--text-primary)}\n"],
|
|
202
|
+
dependencies: [{
|
|
203
|
+
kind: "component",
|
|
204
|
+
type: Checkbox,
|
|
205
|
+
selector: "gbt-checkbox",
|
|
206
|
+
inputs: [
|
|
207
|
+
"id",
|
|
208
|
+
"label",
|
|
209
|
+
"disabled",
|
|
210
|
+
"hint",
|
|
211
|
+
"checked"
|
|
212
|
+
],
|
|
213
|
+
outputs: ["checkedChange"]
|
|
214
|
+
}],
|
|
215
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
216
|
+
});
|
|
217
|
+
};
|
|
218
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
219
|
+
minVersion: "12.0.0",
|
|
220
|
+
version: "22.2.0",
|
|
221
|
+
ngImport: i0,
|
|
222
|
+
type: CheckboxGroup,
|
|
223
|
+
decorators: [{
|
|
224
|
+
type: Component,
|
|
225
|
+
args: [{
|
|
226
|
+
selector: "gbt-checkbox-group",
|
|
227
|
+
standalone: true,
|
|
228
|
+
imports: [Checkbox],
|
|
229
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
230
|
+
providers: [{
|
|
231
|
+
provide: NG_VALUE_ACCESSOR,
|
|
232
|
+
useExisting: forwardRef(() => CheckboxGroup),
|
|
233
|
+
multi: true
|
|
234
|
+
}],
|
|
235
|
+
template: "<fieldset\n class=\"gbt-checkbox-group\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <legend\n class=\"gbt-checkbox-group__legend\"\n [class.gbt-checkbox-group__legend--hidden]=\"hideLegend()\"\n >\n {{ legend() }}{{ required() ? ' *' : '' }}\n </legend>\n @if (showHint()) {\n <p [id]=\"hintId()\" class=\"gbt-checkbox-group__hint\">{{ hint() }}</p>\n }\n <div\n class=\"gbt-checkbox-group__sections\"\n [style.grid-template-columns]=\"sectioned() ? gridColumns() : null\"\n >\n @for (section of sections(); track section.key) {\n <div\n class=\"gbt-checkbox-group__section\"\n [attr.role]=\"section.label ? 'group' : null\"\n [attr.aria-labelledby]=\"section.label ? section.labelId : null\"\n >\n @if (section.label) {\n <p [id]=\"section.labelId\" class=\"gbt-checkbox-group__group-label\">{{ section.label }}</p>\n }\n <div\n class=\"gbt-checkbox-group__list\"\n [style.grid-template-columns]=\"sectioned() ? null : gridColumns()\"\n >\n @for (item of section.items; track item.id) {\n <gbt-checkbox\n [id]=\"item.id\"\n [label]=\"item.option.label\"\n [hint]=\"item.option.hint ?? ''\"\n [disabled]=\"isDisabled() || !!item.option.disabled\"\n [checked]=\"isChecked(item.option.value)\"\n (checkedChange)=\"setChecked(item.option.value, $event)\"\n />\n }\n </div>\n </div>\n }\n </div>\n @if (errorMessage()) {\n <p [id]=\"errorId()\" class=\"gbt-checkbox-group__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</fieldset>\n",
|
|
236
|
+
styles: [":host{display:block}.gbt-checkbox-group{display:flex;flex-direction:column;gap:.75rem;min-width:0;margin:0;padding:0;border:none}.gbt-checkbox-group__legend{padding:0;font-size:.8125rem;font-weight:600;color:var(--text-secondary)}.gbt-checkbox-group__legend--hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.gbt-checkbox-group__hint,.gbt-checkbox-group__error{margin:0;font-size:.75rem}.gbt-checkbox-group__hint{color:var(--text-secondary)}.gbt-checkbox-group__error{color:var(--color-error-text)}.gbt-checkbox-group__sections,.gbt-checkbox-group__list{display:grid;grid-template-columns:minmax(0,1fr)}.gbt-checkbox-group__sections{gap:1rem 1.5rem}.gbt-checkbox-group__list{gap:.5rem 1.5rem;justify-items:start}.gbt-checkbox-group__section{display:flex;flex-direction:column;gap:.375rem;min-width:0}.gbt-checkbox-group__group-label{margin:0 0 .125rem;font-size:.8125rem;font-weight:600;line-height:1.25rem;color:var(--text-primary)}\n"]
|
|
237
|
+
}]
|
|
238
|
+
}],
|
|
239
|
+
propDecorators: {
|
|
240
|
+
id: [{
|
|
241
|
+
type: i0.Input,
|
|
242
|
+
args: [{
|
|
243
|
+
isSignal: true,
|
|
244
|
+
alias: "id",
|
|
245
|
+
required: false
|
|
246
|
+
}]
|
|
247
|
+
}],
|
|
248
|
+
legend: [{
|
|
249
|
+
type: i0.Input,
|
|
250
|
+
args: [{
|
|
251
|
+
isSignal: true,
|
|
252
|
+
alias: "legend",
|
|
253
|
+
required: true
|
|
254
|
+
}]
|
|
255
|
+
}],
|
|
256
|
+
hideLegend: [{
|
|
257
|
+
type: i0.Input,
|
|
258
|
+
args: [{
|
|
259
|
+
isSignal: true,
|
|
260
|
+
alias: "hideLegend",
|
|
261
|
+
required: false
|
|
262
|
+
}]
|
|
263
|
+
}],
|
|
264
|
+
options: [{
|
|
265
|
+
type: i0.Input,
|
|
266
|
+
args: [{
|
|
267
|
+
isSignal: true,
|
|
268
|
+
alias: "options",
|
|
269
|
+
required: false
|
|
270
|
+
}]
|
|
271
|
+
}],
|
|
272
|
+
groups: [{
|
|
273
|
+
type: i0.Input,
|
|
274
|
+
args: [{
|
|
275
|
+
isSignal: true,
|
|
276
|
+
alias: "groups",
|
|
277
|
+
required: false
|
|
278
|
+
}]
|
|
279
|
+
}],
|
|
280
|
+
columns: [{
|
|
281
|
+
type: i0.Input,
|
|
282
|
+
args: [{
|
|
283
|
+
isSignal: true,
|
|
284
|
+
alias: "columns",
|
|
285
|
+
required: false
|
|
286
|
+
}]
|
|
287
|
+
}],
|
|
288
|
+
disabled: [{
|
|
289
|
+
type: i0.Input,
|
|
290
|
+
args: [{
|
|
291
|
+
isSignal: true,
|
|
292
|
+
alias: "disabled",
|
|
293
|
+
required: false
|
|
294
|
+
}]
|
|
295
|
+
}],
|
|
296
|
+
required: [{
|
|
297
|
+
type: i0.Input,
|
|
298
|
+
args: [{
|
|
299
|
+
isSignal: true,
|
|
300
|
+
alias: "required",
|
|
301
|
+
required: false
|
|
302
|
+
}]
|
|
303
|
+
}],
|
|
304
|
+
hint: [{
|
|
305
|
+
type: i0.Input,
|
|
306
|
+
args: [{
|
|
307
|
+
isSignal: true,
|
|
308
|
+
alias: "hint",
|
|
309
|
+
required: false
|
|
310
|
+
}]
|
|
311
|
+
}],
|
|
312
|
+
errorMessage: [{
|
|
313
|
+
type: i0.Input,
|
|
314
|
+
args: [{
|
|
315
|
+
isSignal: true,
|
|
316
|
+
alias: "errorMessage",
|
|
317
|
+
required: false
|
|
318
|
+
}]
|
|
319
|
+
}],
|
|
320
|
+
value: [{
|
|
321
|
+
type: i0.Input,
|
|
322
|
+
args: [{
|
|
323
|
+
isSignal: true,
|
|
324
|
+
alias: "value",
|
|
325
|
+
required: false
|
|
326
|
+
}]
|
|
327
|
+
}, {
|
|
328
|
+
type: i0.Output,
|
|
329
|
+
args: ["valueChange"]
|
|
330
|
+
}]
|
|
331
|
+
}
|
|
332
|
+
});
|
|
333
|
+
export { CheckboxGroup };
|
|
334
|
+
|
|
335
|
+
//# sourceMappingURL=masmarino-gabarit-checkbox-group.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"masmarino-gabarit-checkbox-group.mjs","names":[],"sources":["../../../projects/gabarit/checkbox-group/checkbox-group.ts","../../../projects/gabarit/checkbox-group/checkbox-group.html"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n model,\n signal,\n} from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { Checkbox } from '@masmarino/gabarit/checkbox'\n\nexport interface CheckboxGroupOption<T = string> {\n value: T\n label: string\n hint?: string\n disabled?: boolean\n}\n\nexport interface CheckboxGroupSection<T = string> {\n label: string\n options: CheckboxGroupOption<T>[]\n}\n\ninterface RenderedItem<T> {\n id: string\n option: CheckboxGroupOption<T>\n}\n\ninterface RenderedSection<T> {\n key: string\n label: string | null\n labelId: string\n items: RenderedItem<T>[]\n}\n\nlet nextCheckboxGroupId = 0\n\n@Component({\n selector: 'gbt-checkbox-group',\n standalone: true,\n imports: [Checkbox],\n templateUrl: './checkbox-group.html',\n styleUrl: './checkbox-group.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxGroup),\n multi: true,\n },\n ],\n})\nexport class CheckboxGroup<T = string> implements ControlValueAccessor {\n id = input<string>(`gbt-checkbox-group-${++nextCheckboxGroupId}`)\n legend = input.required<string>()\n hideLegend = input(false, { transform: booleanAttribute })\n options = input<CheckboxGroupOption<T>[]>([])\n groups = input<CheckboxGroupSection<T>[]>([])\n columns = input<number | 'auto'>(1)\n disabled = input(false, { transform: booleanAttribute })\n required = input(false, { transform: booleanAttribute })\n hint = input<string>('')\n errorMessage = input<string | null>(null)\n value = model<T[]>([])\n\n private readonly formDisabled = signal(false)\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled())\n\n protected readonly hintId = computed(() => `${this.id()}-hint`)\n protected readonly errorId = computed(() => `${this.id()}-error`)\n protected readonly showHint = computed(() => !!this.hint() && !this.errorMessage())\n protected readonly describedBy = computed(() => {\n if (this.errorMessage()) return this.errorId()\n return this.showHint() ? this.hintId() : null\n })\n\n protected readonly sections = computed<RenderedSection<T>[]>(() => {\n const id = this.id()\n const result: RenderedSection<T>[] = []\n const flat = this.options()\n if (flat.length > 0) {\n result.push({\n key: 'options',\n label: null,\n labelId: '',\n items: flat.map((option, i) => ({ id: `${id}-${i}`, option })),\n })\n }\n this.groups().forEach((group, g) => {\n result.push({\n key: `group-${g}`,\n label: group.label,\n labelId: `${id}-group-${g}`,\n items: group.options.map((option, i) => ({ id: `${id}-g${g}-${i}`, option })),\n })\n })\n return result\n })\n\n protected readonly sectioned = computed(() => this.sections().some((s) => s.label !== null))\n\n protected readonly gridColumns = computed(() => {\n const columns = this.columns()\n if (columns === 'auto') return 'repeat(auto-fill, minmax(11rem, 1fr))'\n const count = Math.max(1, Math.floor(columns))\n return count === 1 ? null : `repeat(${count}, minmax(0, 1fr))`\n })\n\n private onChange: (value: T[]) => void = () => {}\n private onTouched: () => void = () => {}\n\n writeValue(value: T[] | null): void {\n this.value.set(Array.isArray(value) ? [...value] : [])\n }\n\n registerOnChange(fn: (value: T[]) => void): void {\n this.onChange = fn\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled)\n }\n\n protected isChecked(value: T): boolean {\n return this.value().includes(value)\n }\n\n protected setChecked(value: T, checked: boolean): void {\n const current = this.value()\n if (current.includes(value) === checked) return\n const next = checked ? [...current, value] : current.filter((v) => v !== value)\n const order = this.sections().flatMap((s) => s.items.map((item) => item.option.value))\n const rank = (v: T): number => {\n const index = order.indexOf(v)\n return index === -1 ? order.length : index\n }\n next.sort((a, b) => rank(a) - rank(b))\n this.value.set(next)\n this.onChange(next)\n this.onTouched()\n }\n}\n","<fieldset\n class=\"gbt-checkbox-group\"\n [attr.aria-invalid]=\"errorMessage() ? true : null\"\n [attr.aria-describedby]=\"describedBy()\"\n>\n <legend\n class=\"gbt-checkbox-group__legend\"\n [class.gbt-checkbox-group__legend--hidden]=\"hideLegend()\"\n >\n {{ legend() }}{{ required() ? ' *' : '' }}\n </legend>\n @if (showHint()) {\n <p [id]=\"hintId()\" class=\"gbt-checkbox-group__hint\">{{ hint() }}</p>\n }\n <div\n class=\"gbt-checkbox-group__sections\"\n [style.grid-template-columns]=\"sectioned() ? gridColumns() : null\"\n >\n @for (section of sections(); track section.key) {\n <div\n class=\"gbt-checkbox-group__section\"\n [attr.role]=\"section.label ? 'group' : null\"\n [attr.aria-labelledby]=\"section.label ? section.labelId : null\"\n >\n @if (section.label) {\n <p [id]=\"section.labelId\" class=\"gbt-checkbox-group__group-label\">{{ section.label }}</p>\n }\n <div\n class=\"gbt-checkbox-group__list\"\n [style.grid-template-columns]=\"sectioned() ? null : gridColumns()\"\n >\n @for (item of section.items; track item.id) {\n <gbt-checkbox\n [id]=\"item.id\"\n [label]=\"item.option.label\"\n [hint]=\"item.option.hint ?? ''\"\n [disabled]=\"isDisabled() || !!item.option.disabled\"\n [checked]=\"isChecked(item.option.value)\"\n (checkedChange)=\"setChecked(item.option.value, $event)\"\n />\n }\n </div>\n </div>\n }\n </div>\n @if (errorMessage()) {\n <p [id]=\"errorId()\" class=\"gbt-checkbox-group__error\" role=\"alert\">{{ errorMessage() }}</p>\n }\n</fieldset>\n"],"mappings":"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"}
|