@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,63 @@
|
|
|
1
|
+
# DescriptionList
|
|
2
|
+
|
|
3
|
+
Label/value pairs for a detail page (owner, creation date, size…),
|
|
4
|
+
built on the semantic `<dl>`/`<dt>`/`<dd>` elements rather than a
|
|
5
|
+
`<table>`. For a list of _records_ instead of a single item's
|
|
6
|
+
attributes, use `Table` or `DimensionCard`.
|
|
7
|
+
|
|
8
|
+
**Selector**: `gbt-description-list`
|
|
9
|
+
|
|
10
|
+
## Inputs
|
|
11
|
+
|
|
12
|
+
| Input | Type | Default | Role |
|
|
13
|
+
| ------------ | ----------------------------------------------------------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
14
|
+
| `items` | `{ term: string; value: string \| TemplateRef<unknown> }[]` | required | Each pair. `value` is either plain text, or a `TemplateRef` for rich content (a `Badge`, a link, …). |
|
|
15
|
+
| `layout` | `'stacked' \| 'inline'` | `'stacked'` | `stacked`: term above value. `inline`: term left, value right, in a two-column grid. Falls back to `stacked` below 768px either way (see `responsive`). |
|
|
16
|
+
| `valueAlign` | `'start' \| 'end'` | `'start'` | `end` right-aligns the values (the fact-sheet look: term on the left, value on the far edge of its row). When an inline list collapses to one column, values go back to the start edge. With `layout="stacked"` the values stay on the end edge at every width (under their terms). |
|
|
17
|
+
| `responsive` | `'viewport' \| 'container'` | `'viewport'` | What an inline list stacks on. `viewport` (default): stacks below a 768px viewport. `container`: the list's own width — it stacks below 30rem, whatever the viewport. |
|
|
18
|
+
|
|
19
|
+
### `responsive="container"`
|
|
20
|
+
|
|
21
|
+
The component becomes a size container (`display: block; container-type: inline-size`), so an inline
|
|
22
|
+
list in a narrow card or side panel stacks even on a wide screen, and keeps two columns in a
|
|
23
|
+
wide card even on a phone-sized viewport. Things to know:
|
|
24
|
+
|
|
25
|
+
- The host takes the width its parent gives it. In a flex row, give it `flex: 1` or a width (a size
|
|
26
|
+
container has no intrinsic inline size of its own).
|
|
27
|
+
- Browsers without container queries (`@supports (container-type: inline-size)` false) ignore the
|
|
28
|
+
option: the list stays on two columns at every width. Every evergreen browser has supported them
|
|
29
|
+
since early 2023.
|
|
30
|
+
- It is opt-in: with the default `viewport`, the list only uses the plain viewport media query described above.
|
|
31
|
+
|
|
32
|
+
## Example
|
|
33
|
+
|
|
34
|
+
```html
|
|
35
|
+
<ng-template #statusValue>
|
|
36
|
+
<gbt-badge variant="success">Actif</gbt-badge>
|
|
37
|
+
</ng-template>
|
|
38
|
+
|
|
39
|
+
<gbt-description-list
|
|
40
|
+
layout="inline"
|
|
41
|
+
[items]="[
|
|
42
|
+
{ term: 'Propriétaire', value: 'Ada Lovelace' },
|
|
43
|
+
{ term: 'Créé le', value: '12 mars 2024' },
|
|
44
|
+
{ term: 'Statut', value: statusValue },
|
|
45
|
+
]"
|
|
46
|
+
/>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
statusValue = viewChild.required<TemplateRef<unknown>>('statusValue')
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Why `items` + `TemplateRef`, not projected `<gbt-description-list-item>`s
|
|
54
|
+
|
|
55
|
+
`<dl>` may only directly contain `<dt>`/`<dd>` (or a `<div>` wrapping a
|
|
56
|
+
pair) — axe flags any other element, including a custom element set to
|
|
57
|
+
`display: contents`, as an invalid child, because that CSS property
|
|
58
|
+
changes rendering, not the actual DOM parent/child relationship the HTML
|
|
59
|
+
content model and ARIA role mapping both depend on. Rendering every
|
|
60
|
+
`<dt>`/`<dd>` directly from this component's own template (via `items`)
|
|
61
|
+
keeps them genuine direct children of `<dl>` while still supporting rich
|
|
62
|
+
values, which is why `value` accepts a `TemplateRef` instead of a
|
|
63
|
+
projected `<gbt-description-list-item>`.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# DimensionCard
|
|
2
|
+
|
|
3
|
+
Dimension table, with the hovered row accented — a decorative accent
|
|
4
|
+
only, everything it highlights is already in the visible table; its rows
|
|
5
|
+
are therefore not focusable.
|
|
6
|
+
|
|
7
|
+
**Selector**: `gbt-dimension-card`
|
|
8
|
+
|
|
9
|
+
Standalone, outside the dataviz base: no tooltip, no keyboard
|
|
10
|
+
navigation, no separate `sr-only` table — `gbt-dimension-card` **is**
|
|
11
|
+
already a real, visible table.
|
|
12
|
+
|
|
13
|
+
## Inputs
|
|
14
|
+
|
|
15
|
+
| Input | Type | Role |
|
|
16
|
+
| -------------- | ---------------- | --------------------------------------------- |
|
|
17
|
+
| `rows` | `DimensionRow[]` | Required. `{ label, value, display? }` rows. |
|
|
18
|
+
| `caption` | `string` | Required. Table caption. |
|
|
19
|
+
| `labelColumn` | `string` | Required. Header of the label column. |
|
|
20
|
+
| `valueColumn` | `string` | Required. Header of the value column. |
|
|
21
|
+
| `emptyMessage` | `string` | Required. Message shown when `rows` is empty. |
|
|
22
|
+
| `locale` | `string` | Required. Locale used to format numbers. |
|
|
23
|
+
|
|
24
|
+
A row's `display` replaces the formatted number in the value column, for
|
|
25
|
+
values a locale-aware number format can't express — bytes, durations, a
|
|
26
|
+
currency. The bar still scales on `value`, so the comparison stays honest.
|
|
27
|
+
|
|
28
|
+
## Example
|
|
29
|
+
|
|
30
|
+
```html
|
|
31
|
+
<gbt-dimension-card
|
|
32
|
+
[rows]="[{ label: 'Europe', value: 4200 }, { label: 'Amériques', value: 3100 }]"
|
|
33
|
+
caption="Requêtes par région"
|
|
34
|
+
labelColumn="Région"
|
|
35
|
+
valueColumn="Requêtes"
|
|
36
|
+
emptyMessage="Aucune donnée"
|
|
37
|
+
locale="fr-FR"
|
|
38
|
+
/>
|
|
39
|
+
```
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Disclosure
|
|
2
|
+
|
|
3
|
+
A single disclosure: a toggle button and the panel it shows or hides ("Advanced options", "Files", "More
|
|
4
|
+
details"). It is [`gbt-accordion-item`](../accordion-item/README.md) without the accordion around it: no parent
|
|
5
|
+
group, no index, an `open` model you can bind.
|
|
6
|
+
|
|
7
|
+
**Selector**: `gbt-disclosure`
|
|
8
|
+
|
|
9
|
+
## Inputs
|
|
10
|
+
|
|
11
|
+
| Input | Type | Default | Role |
|
|
12
|
+
| -------------- | ------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------- |
|
|
13
|
+
| `label` | `string` | — | Required. The text of the toggle. |
|
|
14
|
+
| `open` | `boolean` (model) | `false` | Whether the panel is shown. Two-way: `[(open)]`. |
|
|
15
|
+
| `icon` | `string \| null` | `null` | Registered icon name before the label. |
|
|
16
|
+
| `appearance` | `'bordered' \| 'plain'` | `'bordered'` | `bordered`: a framed box with a tinted panel. `plain`: only the toggle and the panel. |
|
|
17
|
+
| `headingLevel` | `2 \| 3 \| 4 \| 5 \| 6 \| null` | `null` | Wraps the toggle in a heading of that level (when the disclosure titles a section). `null`: no heading. |
|
|
18
|
+
|
|
19
|
+
`openChange` is emitted by the model each time the user toggles.
|
|
20
|
+
|
|
21
|
+
## Pattern
|
|
22
|
+
|
|
23
|
+
The ARIA disclosure pattern, on the repo's accordion-item ground:
|
|
24
|
+
|
|
25
|
+
- a native `<button type="button">` with `aria-expanded` and `aria-controls` (Enter and Space work natively);
|
|
26
|
+
- a panel that is **`inert` while closed** (nothing in it can be focused or read) and `visibility: hidden`
|
|
27
|
+
once the 200 ms collapse has run;
|
|
28
|
+
- a chevron that turns (not under `prefers-reduced-motion`).
|
|
29
|
+
|
|
30
|
+
The panel's content is always instantiated: a heavy component inside is created while closed. Wrap it in
|
|
31
|
+
`@if (open())` if that matters (the `open` model is right there).
|
|
32
|
+
|
|
33
|
+
## Example
|
|
34
|
+
|
|
35
|
+
```html
|
|
36
|
+
<gbt-disclosure label="Advanced options" [(open)]="advancedOpen">
|
|
37
|
+
<gbt-switch label="CI enabled" [(ngModel)]="ciEnabled" />
|
|
38
|
+
<gbt-input label="Pipeline file path" [(ngModel)]="pipelineFile" />
|
|
39
|
+
</gbt-disclosure>
|
|
40
|
+
|
|
41
|
+
<gbt-disclosure label="Danger zone" icon="alert-triangle" [headingLevel]="3">…</gbt-disclosure>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Accessibility
|
|
45
|
+
|
|
46
|
+
See [AUDIT.md](AUDIT.md). Not covered: a disclosure that is open at a wide width and collapsible only on a
|
|
47
|
+
phone (the file view's "Files" toggle) is a layout decision of the page: bind `[open]` to a breakpoint signal
|
|
48
|
+
you own.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Divider
|
|
2
|
+
|
|
3
|
+
A thin separating line between sections or list items, with an
|
|
4
|
+
optional centered label (e.g. "OR" between two sign-in buttons).
|
|
5
|
+
|
|
6
|
+
**Selector**: `gbt-divider`
|
|
7
|
+
|
|
8
|
+
## Inputs
|
|
9
|
+
|
|
10
|
+
| Input | Type | Default | Role |
|
|
11
|
+
| ------------- | ------------------------------ | ---------------- | --------------------------------------------------------------- |
|
|
12
|
+
| `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` | `vertical` needs a defined height from its context — it stretches to fill it (`align-self: stretch`), it doesn't invent one. |
|
|
13
|
+
| `label` | `string` | `''` | Optional text centered between two line segments. |
|
|
14
|
+
|
|
15
|
+
## Example
|
|
16
|
+
|
|
17
|
+
```html
|
|
18
|
+
<gbt-divider />
|
|
19
|
+
<gbt-divider label="OR" />
|
|
20
|
+
<gbt-divider orientation="vertical" />
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Behavior
|
|
24
|
+
|
|
25
|
+
- `role="separator"`, with `aria-orientation="vertical"` only for the
|
|
26
|
+
vertical case — `horizontal` is the ARIA default, so the attribute
|
|
27
|
+
is omitted rather than stated redundantly.
|
|
28
|
+
- A vertical divider inside a flex row needs the row to give it a
|
|
29
|
+
height (e.g. via `align-items: stretch`, the flex default, or an
|
|
30
|
+
explicit height on the row) — it has none of its own to fall back
|
|
31
|
+
on.
|
package/drawer/README.md
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Drawer
|
|
2
|
+
|
|
3
|
+
Side panel that slides in from an edge of the screen — traps focus,
|
|
4
|
+
closes on Escape or a click on the backdrop, same control pattern as
|
|
5
|
+
`Modal`. Unlike `Modal` (centered, blocks the whole page for a focused
|
|
6
|
+
task), `Drawer` is for application content that sits alongside the
|
|
7
|
+
page — a detail panel, advanced filters.
|
|
8
|
+
|
|
9
|
+
**Selector**: `gbt-drawer`
|
|
10
|
+
|
|
11
|
+
## Inputs
|
|
12
|
+
|
|
13
|
+
| Input | Type | Default | Role |
|
|
14
|
+
| -------------- | ----------------------------------------- | --------- | ------------------------------------------------ |
|
|
15
|
+
| `isOpen` | `boolean` | required | Open/closed state, driven by the application. |
|
|
16
|
+
| `edge` | `'right' \| 'left' \| 'top' \| 'bottom'` | `'right'` | Which edge the panel slides in from. |
|
|
17
|
+
| `heading` | `string` | `''` | Panel title. |
|
|
18
|
+
| `headingLevel` | `1 \| 2 \| 3 \| 4 \| 5 \| 6` | `2` | Level of the rendered heading. |
|
|
19
|
+
| `closeLabel` | `string` | `'Close'` | Accessible name of the close button. |
|
|
20
|
+
|
|
21
|
+
## Outputs
|
|
22
|
+
|
|
23
|
+
| Output | Type | Role |
|
|
24
|
+
| -------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
25
|
+
| `closed` | `void` | Emitted on Escape, a click outside the panel, or a click on the close button. The application must respond by setting `isOpen` to `false`. |
|
|
26
|
+
|
|
27
|
+
## Example
|
|
28
|
+
|
|
29
|
+
```html
|
|
30
|
+
<gbt-drawer [isOpen]="open()" edge="right" heading="Filtres" (closed)="open.set(false)">
|
|
31
|
+
Contenu du tiroir.
|
|
32
|
+
</gbt-drawer>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Behavior
|
|
36
|
+
|
|
37
|
+
- Slides in/out with a matching backdrop fade (200ms), instead of
|
|
38
|
+
appearing/disappearing instantly like `Modal` — the panel stays
|
|
39
|
+
mounted for the closing animation's duration after `isOpen` becomes
|
|
40
|
+
`false`, then unmounts and returns focus, exactly like `Modal`
|
|
41
|
+
otherwise does immediately. Both animations are skipped under
|
|
42
|
+
`prefers-reduced-motion: reduce`.
|
|
43
|
+
- Sized `min(90vw, 400px)` for `left`/`right`, `min(90vh, 400px)` for
|
|
44
|
+
`top`/`bottom` — adapts to the viewport with a fixed cap, same
|
|
45
|
+
reasoning as `Modal`'s own `min(90vw, 480px)` dialog width.
|
|
46
|
+
- `AppShell`'s own mobile navigation drawer is a separate,
|
|
47
|
+
independent implementation, not built on `gbt-drawer`: its needs (a
|
|
48
|
+
fixed nav-link list, no arbitrary content) are narrower than this
|
|
49
|
+
component's.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# EmptyState
|
|
2
|
+
|
|
3
|
+
A placeholder shown instead of an empty list/grid: an illustration, a
|
|
4
|
+
heading, an optional message, and an optional action (a button)
|
|
5
|
+
projected as content — used to distinguish "there is genuinely nothing
|
|
6
|
+
here yet" from a plain "no results" text message.
|
|
7
|
+
|
|
8
|
+
**Selector**: `gbt-empty-state`
|
|
9
|
+
|
|
10
|
+
## Inputs
|
|
11
|
+
|
|
12
|
+
| Input | Type | Default | Role |
|
|
13
|
+
| ------------------ | ------------------------------------ | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
14
|
+
| `illustration` | `EmptyStateIllustration` | `null` | One of `'folder' \| 'star' \| 'checklist' \| 'merge' \| 'pipeline' \| 'tag' \| 'book' \| 'server'`. Optional. |
|
|
15
|
+
| `heading` | `string` | — | Required. The primary message. |
|
|
16
|
+
| `message` | `string` | `''` | Optional secondary text, e.g. a hint or call to action description. |
|
|
17
|
+
| `icon` | `string \| null` | `null` | A registered icon name on a soft disc, in place of the artwork (ignored when an `illustration` is set). |
|
|
18
|
+
| `size` | `'default' \| 'compact'` | `'default'` | `compact` is the in-card block: smaller disc/artwork, tighter padding and type. |
|
|
19
|
+
| `tone` | `'default' \| 'error'` | `'default'` | `error` tints the disc (or the artwork) in the error colours — a list that could not be loaded. |
|
|
20
|
+
| `headingLevel` | `1 \| 2 \| 3 \| 4 \| 5 \| 6 \| null` | `null` | Renders the heading as an `h1`…`h6` (default: a `<p>`). |
|
|
21
|
+
| `headingId` | `string \| null` | `null` | `id` of the heading element, so a region can use `aria-labelledby`. |
|
|
22
|
+
| `headingFocusable` | `boolean` | `false` | Gives the heading `tabindex="-1"` (a programmatic focus target, not a tab stop; it shows no focus ring, being no control). |
|
|
23
|
+
|
|
24
|
+
## Methods
|
|
25
|
+
|
|
26
|
+
| Method | Role |
|
|
27
|
+
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
|
|
28
|
+
| `focusHeading()` | Moves focus to the heading — needs `headingFocusable`. For a result page (activation done, link expired) that moves focus to its title. |
|
|
29
|
+
|
|
30
|
+
## Content
|
|
31
|
+
|
|
32
|
+
An optional action (typically a `<gbt-button>`) is projected via
|
|
33
|
+
`<ng-content />`, rendered below the message.
|
|
34
|
+
|
|
35
|
+
## Example
|
|
36
|
+
|
|
37
|
+
```html
|
|
38
|
+
<gbt-empty-state
|
|
39
|
+
illustration="folder"
|
|
40
|
+
heading="Aucun dépôt pour l'instant"
|
|
41
|
+
message="Créez votre premier dépôt pour commencer."
|
|
42
|
+
>
|
|
43
|
+
<gbt-button text="Nouveau dépôt" (clicked)="openCreate()" />
|
|
44
|
+
</gbt-empty-state>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Icon, compact and in-card states
|
|
48
|
+
|
|
49
|
+
The 96 px artwork suits a whole page or an empty list. Inside a card, use the
|
|
50
|
+
compact block with an icon:
|
|
51
|
+
|
|
52
|
+
```html
|
|
53
|
+
<gbt-card variant="outlined" heading="Variables" flush>
|
|
54
|
+
<gbt-empty-state
|
|
55
|
+
size="compact"
|
|
56
|
+
icon="key"
|
|
57
|
+
heading="Aucune variable définie"
|
|
58
|
+
message="Les variables sont injectées dans chaque job."
|
|
59
|
+
/>
|
|
60
|
+
</gbt-card>
|
|
61
|
+
|
|
62
|
+
<gbt-empty-state size="compact" tone="error" icon="alert-circle" heading="Chargement impossible">
|
|
63
|
+
<gbt-button variant="secondary" size="small" text="Réessayer" (clicked)="retry()" />
|
|
64
|
+
</gbt-empty-state>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
With neither `illustration` nor `icon` a compact state is a bare heading (and
|
|
68
|
+
message): the "Not found." block.
|
|
69
|
+
|
|
70
|
+
## Heading level
|
|
71
|
+
|
|
72
|
+
By default the heading is a `<p>` — the component cannot know where it sits in
|
|
73
|
+
your page outline. Pass `headingLevel` when the state stands for a section (or
|
|
74
|
+
the whole page, `1`), and `headingId` to name a surrounding `<section>`.
|
|
75
|
+
|
|
76
|
+
## Choosing an illustration
|
|
77
|
+
|
|
78
|
+
Each illustration is a fixed, curated piece of art shipped by Gabarit —
|
|
79
|
+
not an extensible registry like `gbt-icon`'s. Pick whichever of the
|
|
80
|
+
eight best matches the empty collection: `folder` for
|
|
81
|
+
repositories/groups, `star` for a starred/favorites list, `checklist`
|
|
82
|
+
for issues, `merge` for merge/pull requests, `pipeline` for CI
|
|
83
|
+
pipelines, `tag` for releases, `book` for a wiki, `server` for
|
|
84
|
+
infrastructure (e.g. CI runners).
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import { ChangeDetectionStrategy, Component, computed, contentChildren, effect, inject, input, model, signal, viewChild } from "@angular/core";
|
|
3
|
+
import { Icon } from "@masmarino/gabarit/icon";
|
|
4
|
+
let nextAccordionId = 0;
|
|
5
|
+
var Accordion = class Accordion {
|
|
6
|
+
id = input(`gbt-accordion-${++nextAccordionId}`, ...ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []);
|
|
7
|
+
mode = input("single", ...ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []);
|
|
8
|
+
expanded = model([], ...ngDevMode ? [{ debugName: "expanded" }] : /* istanbul ignore next */ []);
|
|
9
|
+
items = contentChildren(AccordionItem, ...ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []);
|
|
10
|
+
constructor() {
|
|
11
|
+
effect(() => {
|
|
12
|
+
const items = this.items();
|
|
13
|
+
const expanded = this.expanded();
|
|
14
|
+
const groupId = this.id();
|
|
15
|
+
items.forEach((item, i) => item.setState(i, expanded.includes(i), groupId));
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
toggle(index) {
|
|
19
|
+
const current = this.expanded();
|
|
20
|
+
if (this.mode() === "single") {
|
|
21
|
+
this.expanded.set(current.includes(index) ? [] : [index]);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
this.expanded.set(current.includes(index) ? current.filter((i) => i !== index) : [...current, index]);
|
|
25
|
+
}
|
|
26
|
+
focusHeader(index) {
|
|
27
|
+
const items = this.items();
|
|
28
|
+
const count = items.length;
|
|
29
|
+
if (count === 0) return;
|
|
30
|
+
items[(index % count + count) % count]?.focusHeader();
|
|
31
|
+
}
|
|
32
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
33
|
+
minVersion: "12.0.0",
|
|
34
|
+
version: "22.2.0",
|
|
35
|
+
ngImport: i0,
|
|
36
|
+
type: Accordion,
|
|
37
|
+
deps: [],
|
|
38
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
39
|
+
});
|
|
40
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
41
|
+
minVersion: "17.2.0",
|
|
42
|
+
version: "22.2.0",
|
|
43
|
+
type: Accordion,
|
|
44
|
+
isStandalone: true,
|
|
45
|
+
selector: "gbt-accordion",
|
|
46
|
+
inputs: {
|
|
47
|
+
id: {
|
|
48
|
+
classPropertyName: "id",
|
|
49
|
+
publicName: "id",
|
|
50
|
+
isSignal: true,
|
|
51
|
+
isRequired: false,
|
|
52
|
+
transformFunction: null
|
|
53
|
+
},
|
|
54
|
+
mode: {
|
|
55
|
+
classPropertyName: "mode",
|
|
56
|
+
publicName: "mode",
|
|
57
|
+
isSignal: true,
|
|
58
|
+
isRequired: false,
|
|
59
|
+
transformFunction: null
|
|
60
|
+
},
|
|
61
|
+
expanded: {
|
|
62
|
+
classPropertyName: "expanded",
|
|
63
|
+
publicName: "expanded",
|
|
64
|
+
isSignal: true,
|
|
65
|
+
isRequired: false,
|
|
66
|
+
transformFunction: null
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
outputs: { expanded: "expandedChange" },
|
|
70
|
+
queries: [{
|
|
71
|
+
propertyName: "items",
|
|
72
|
+
predicate: AccordionItem,
|
|
73
|
+
isSignal: true
|
|
74
|
+
}],
|
|
75
|
+
ngImport: i0,
|
|
76
|
+
template: `
|
|
77
|
+
<div class="gbt-accordion">
|
|
78
|
+
<ng-content></ng-content>
|
|
79
|
+
</div>
|
|
80
|
+
`,
|
|
81
|
+
isInline: true,
|
|
82
|
+
styles: [".gbt-accordion{display:block;border:1px solid var(--border-color);border-radius:var(--site-border-radius-sm);overflow:hidden}\n"],
|
|
83
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
84
|
+
});
|
|
85
|
+
};
|
|
86
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
87
|
+
minVersion: "12.0.0",
|
|
88
|
+
version: "22.2.0",
|
|
89
|
+
ngImport: i0,
|
|
90
|
+
type: Accordion,
|
|
91
|
+
decorators: [{
|
|
92
|
+
type: Component,
|
|
93
|
+
args: [{
|
|
94
|
+
selector: "gbt-accordion",
|
|
95
|
+
standalone: true,
|
|
96
|
+
imports: [],
|
|
97
|
+
template: `
|
|
98
|
+
<div class="gbt-accordion">
|
|
99
|
+
<ng-content></ng-content>
|
|
100
|
+
</div>
|
|
101
|
+
`,
|
|
102
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
103
|
+
styles: [".gbt-accordion{display:block;border:1px solid var(--border-color);border-radius:var(--site-border-radius-sm);overflow:hidden}\n"]
|
|
104
|
+
}]
|
|
105
|
+
}],
|
|
106
|
+
ctorParameters: () => [],
|
|
107
|
+
propDecorators: {
|
|
108
|
+
id: [{
|
|
109
|
+
type: i0.Input,
|
|
110
|
+
args: [{
|
|
111
|
+
isSignal: true,
|
|
112
|
+
alias: "id",
|
|
113
|
+
required: false
|
|
114
|
+
}]
|
|
115
|
+
}],
|
|
116
|
+
mode: [{
|
|
117
|
+
type: i0.Input,
|
|
118
|
+
args: [{
|
|
119
|
+
isSignal: true,
|
|
120
|
+
alias: "mode",
|
|
121
|
+
required: false
|
|
122
|
+
}]
|
|
123
|
+
}],
|
|
124
|
+
expanded: [{
|
|
125
|
+
type: i0.Input,
|
|
126
|
+
args: [{
|
|
127
|
+
isSignal: true,
|
|
128
|
+
alias: "expanded",
|
|
129
|
+
required: false
|
|
130
|
+
}]
|
|
131
|
+
}, {
|
|
132
|
+
type: i0.Output,
|
|
133
|
+
args: ["expandedChange"]
|
|
134
|
+
}],
|
|
135
|
+
items: [{
|
|
136
|
+
type: i0.ContentChildren,
|
|
137
|
+
args: [i0.forwardRef(() => AccordionItem), { isSignal: true }]
|
|
138
|
+
}]
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
var AccordionItem = class AccordionItem {
|
|
142
|
+
parent = inject(Accordion);
|
|
143
|
+
header = viewChild("header", ...ngDevMode ? [{ debugName: "header" }] : /* istanbul ignore next */ []);
|
|
144
|
+
label = input.required(...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
|
|
145
|
+
active = signal(false, ...ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []);
|
|
146
|
+
index = signal(0, ...ngDevMode ? [{ debugName: "index" }] : /* istanbul ignore next */ []);
|
|
147
|
+
groupId = signal("", ...ngDevMode ? [{ debugName: "groupId" }] : /* istanbul ignore next */ []);
|
|
148
|
+
headerId = computed(() => `${this.groupId()}-header-${this.index()}`, ...ngDevMode ? [{ debugName: "headerId" }] : /* istanbul ignore next */ []);
|
|
149
|
+
panelId = computed(() => `${this.groupId()}-panel-${this.index()}`, ...ngDevMode ? [{ debugName: "panelId" }] : /* istanbul ignore next */ []);
|
|
150
|
+
setState(index, active, groupId) {
|
|
151
|
+
this.index.set(index);
|
|
152
|
+
this.active.set(active);
|
|
153
|
+
this.groupId.set(groupId);
|
|
154
|
+
}
|
|
155
|
+
focusHeader() {
|
|
156
|
+
this.header()?.nativeElement.focus();
|
|
157
|
+
}
|
|
158
|
+
toggle() {
|
|
159
|
+
this.parent.toggle(this.index());
|
|
160
|
+
}
|
|
161
|
+
onKeydown(event) {
|
|
162
|
+
if (event.key === "ArrowDown") {
|
|
163
|
+
event.preventDefault();
|
|
164
|
+
this.parent.focusHeader(this.index() + 1);
|
|
165
|
+
} else if (event.key === "ArrowUp") {
|
|
166
|
+
event.preventDefault();
|
|
167
|
+
this.parent.focusHeader(this.index() - 1);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
171
|
+
minVersion: "12.0.0",
|
|
172
|
+
version: "22.2.0",
|
|
173
|
+
ngImport: i0,
|
|
174
|
+
type: AccordionItem,
|
|
175
|
+
deps: [],
|
|
176
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
177
|
+
});
|
|
178
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
179
|
+
minVersion: "17.2.0",
|
|
180
|
+
version: "22.2.0",
|
|
181
|
+
type: AccordionItem,
|
|
182
|
+
isStandalone: true,
|
|
183
|
+
selector: "gbt-accordion-item",
|
|
184
|
+
inputs: { label: {
|
|
185
|
+
classPropertyName: "label",
|
|
186
|
+
publicName: "label",
|
|
187
|
+
isSignal: true,
|
|
188
|
+
isRequired: true,
|
|
189
|
+
transformFunction: null
|
|
190
|
+
} },
|
|
191
|
+
viewQueries: [{
|
|
192
|
+
propertyName: "header",
|
|
193
|
+
first: true,
|
|
194
|
+
predicate: ["header"],
|
|
195
|
+
descendants: true,
|
|
196
|
+
isSignal: true
|
|
197
|
+
}],
|
|
198
|
+
ngImport: i0,
|
|
199
|
+
template: "<button\n #header\n type=\"button\"\n class=\"gbt-accordion-item__header\"\n [class.gbt-accordion-item__header--open]=\"active()\"\n [id]=\"headerId()\"\n [attr.aria-expanded]=\"active()\"\n [attr.aria-controls]=\"panelId()\"\n (click)=\"toggle()\"\n (keydown)=\"onKeydown($event)\"\n>\n <span class=\"gbt-accordion-item__label\">{{ label() }}</span>\n <gbt-icon name=\"chevron-down\" class=\"gbt-accordion-item__chevron\" aria-hidden=\"true\" />\n</button>\n<div\n class=\"gbt-accordion-item__panel\"\n [class.gbt-accordion-item__panel--open]=\"active()\"\n [id]=\"panelId()\"\n [attr.aria-labelledby]=\"headerId()\"\n [attr.inert]=\"active() ? null : ''\"\n>\n <div class=\"gbt-accordion-item__panel-inner\">\n <div class=\"gbt-accordion-item__panel-content\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n",
|
|
200
|
+
styles: [":host{display:block}:host:not(:last-child){border-bottom:1px solid var(--border-color)}.gbt-accordion-item__header{box-sizing:border-box;display:flex;align-items:center;gap:.75rem;width:100%;padding:.875rem 1rem;background:var(--bg-principal);border:none;color:var(--text-primary);font-size:14px;font-weight:600;text-align:left;cursor:pointer;transition:background .12s cubic-bezier(.4,0,.2,1)}.gbt-accordion-item__header:hover{background:var(--bg-hover)}.gbt-accordion-item__header:focus-visible{outline:2px solid var(--gbt-focus-ring, var(--focus-ring));outline-offset:-2px}.gbt-accordion-item__label{flex:1;min-width:0}.gbt-accordion-item__chevron{flex-shrink:0;color:var(--text-secondary);transition:transform .2s cubic-bezier(.4,0,.2,1)}.gbt-accordion-item__header--open .gbt-accordion-item__chevron{transform:rotate(180deg)}.gbt-accordion-item__panel{display:grid;grid-template-rows:0fr;transition:grid-template-rows .2s cubic-bezier(.4,0,.2,1)}.gbt-accordion-item__panel--open{grid-template-rows:1fr}.gbt-accordion-item__panel-inner{overflow:hidden;min-height:0}.gbt-accordion-item__panel-content{padding:1rem}@media(prefers-reduced-motion:reduce){.gbt-accordion-item__chevron,.gbt-accordion-item__panel{transition:none}}\n"],
|
|
201
|
+
dependencies: [{
|
|
202
|
+
kind: "component",
|
|
203
|
+
type: Icon,
|
|
204
|
+
selector: "gbt-icon",
|
|
205
|
+
inputs: ["name"]
|
|
206
|
+
}],
|
|
207
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
208
|
+
});
|
|
209
|
+
};
|
|
210
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
211
|
+
minVersion: "12.0.0",
|
|
212
|
+
version: "22.2.0",
|
|
213
|
+
ngImport: i0,
|
|
214
|
+
type: AccordionItem,
|
|
215
|
+
decorators: [{
|
|
216
|
+
type: Component,
|
|
217
|
+
args: [{
|
|
218
|
+
selector: "gbt-accordion-item",
|
|
219
|
+
standalone: true,
|
|
220
|
+
imports: [Icon],
|
|
221
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
222
|
+
template: "<button\n #header\n type=\"button\"\n class=\"gbt-accordion-item__header\"\n [class.gbt-accordion-item__header--open]=\"active()\"\n [id]=\"headerId()\"\n [attr.aria-expanded]=\"active()\"\n [attr.aria-controls]=\"panelId()\"\n (click)=\"toggle()\"\n (keydown)=\"onKeydown($event)\"\n>\n <span class=\"gbt-accordion-item__label\">{{ label() }}</span>\n <gbt-icon name=\"chevron-down\" class=\"gbt-accordion-item__chevron\" aria-hidden=\"true\" />\n</button>\n<div\n class=\"gbt-accordion-item__panel\"\n [class.gbt-accordion-item__panel--open]=\"active()\"\n [id]=\"panelId()\"\n [attr.aria-labelledby]=\"headerId()\"\n [attr.inert]=\"active() ? null : ''\"\n>\n <div class=\"gbt-accordion-item__panel-inner\">\n <div class=\"gbt-accordion-item__panel-content\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n",
|
|
223
|
+
styles: [":host{display:block}:host:not(:last-child){border-bottom:1px solid var(--border-color)}.gbt-accordion-item__header{box-sizing:border-box;display:flex;align-items:center;gap:.75rem;width:100%;padding:.875rem 1rem;background:var(--bg-principal);border:none;color:var(--text-primary);font-size:14px;font-weight:600;text-align:left;cursor:pointer;transition:background .12s cubic-bezier(.4,0,.2,1)}.gbt-accordion-item__header:hover{background:var(--bg-hover)}.gbt-accordion-item__header:focus-visible{outline:2px solid var(--gbt-focus-ring, var(--focus-ring));outline-offset:-2px}.gbt-accordion-item__label{flex:1;min-width:0}.gbt-accordion-item__chevron{flex-shrink:0;color:var(--text-secondary);transition:transform .2s cubic-bezier(.4,0,.2,1)}.gbt-accordion-item__header--open .gbt-accordion-item__chevron{transform:rotate(180deg)}.gbt-accordion-item__panel{display:grid;grid-template-rows:0fr;transition:grid-template-rows .2s cubic-bezier(.4,0,.2,1)}.gbt-accordion-item__panel--open{grid-template-rows:1fr}.gbt-accordion-item__panel-inner{overflow:hidden;min-height:0}.gbt-accordion-item__panel-content{padding:1rem}@media(prefers-reduced-motion:reduce){.gbt-accordion-item__chevron,.gbt-accordion-item__panel{transition:none}}\n"]
|
|
224
|
+
}]
|
|
225
|
+
}],
|
|
226
|
+
propDecorators: {
|
|
227
|
+
header: [{
|
|
228
|
+
type: i0.ViewChild,
|
|
229
|
+
args: ["header", { isSignal: true }]
|
|
230
|
+
}],
|
|
231
|
+
label: [{
|
|
232
|
+
type: i0.Input,
|
|
233
|
+
args: [{
|
|
234
|
+
isSignal: true,
|
|
235
|
+
alias: "label",
|
|
236
|
+
required: true
|
|
237
|
+
}]
|
|
238
|
+
}]
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
export { Accordion, AccordionItem };
|
|
242
|
+
|
|
243
|
+
//# sourceMappingURL=masmarino-gabarit-accordion.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"masmarino-gabarit-accordion.mjs","names":[],"sources":["../../../projects/gabarit/accordion/accordion.ts","../../../projects/gabarit/accordion/accordion-item/accordion-item.ts","../../../projects/gabarit/accordion/accordion-item/accordion-item.html"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n effect,\n input,\n model,\n} from '@angular/core'\nimport { AccordionItem } from './accordion-item/accordion-item'\n\nexport type AccordionMode = 'single' | 'multiple'\n\nlet nextAccordionId = 0\n\n@Component({\n selector: 'gbt-accordion',\n standalone: true,\n imports: [],\n template: `\n <div class=\"gbt-accordion\">\n <ng-content></ng-content>\n </div>\n `,\n styleUrl: './accordion.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Accordion {\n id = input<string>(`gbt-accordion-${++nextAccordionId}`)\n mode = input<AccordionMode>('single')\n expanded = model<number[]>([])\n\n protected readonly items = contentChildren(AccordionItem)\n\n constructor() {\n effect(() => {\n const items = this.items()\n const expanded = this.expanded()\n const groupId = this.id()\n items.forEach((item, i) => item.setState(i, expanded.includes(i), groupId))\n })\n }\n\n toggle(index: number): void {\n const current = this.expanded()\n if (this.mode() === 'single') {\n this.expanded.set(current.includes(index) ? [] : [index])\n return\n }\n this.expanded.set(\n current.includes(index) ? current.filter((i) => i !== index) : [...current, index],\n )\n }\n\n focusHeader(index: number): void {\n const items = this.items()\n const count = items.length\n if (count === 0) {\n return\n }\n const wrapped = ((index % count) + count) % count\n items[wrapped]?.focusHeader()\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core'\nimport { Icon } from '@masmarino/gabarit/icon'\nimport { Accordion } from '../accordion'\n\n@Component({\n selector: 'gbt-accordion-item',\n standalone: true,\n imports: [Icon],\n templateUrl: './accordion-item.html',\n styleUrl: './accordion-item.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AccordionItem {\n private readonly parent = inject(Accordion)\n private readonly header = viewChild<ElementRef<HTMLButtonElement>>('header')\n\n label = input.required<string>()\n\n protected readonly active = signal(false)\n protected readonly index = signal(0)\n protected readonly groupId = signal('')\n\n protected readonly headerId = computed(() => `${this.groupId()}-header-${this.index()}`)\n protected readonly panelId = computed(() => `${this.groupId()}-panel-${this.index()}`)\n\n setState(index: number, active: boolean, groupId: string): void {\n this.index.set(index)\n this.active.set(active)\n this.groupId.set(groupId)\n }\n\n focusHeader(): void {\n this.header()?.nativeElement.focus()\n }\n\n protected toggle(): void {\n this.parent.toggle(this.index())\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n this.parent.focusHeader(this.index() + 1)\n } else if (event.key === 'ArrowUp') {\n event.preventDefault()\n this.parent.focusHeader(this.index() - 1)\n }\n }\n}\n","<button\n #header\n type=\"button\"\n class=\"gbt-accordion-item__header\"\n [class.gbt-accordion-item__header--open]=\"active()\"\n [id]=\"headerId()\"\n [attr.aria-expanded]=\"active()\"\n [attr.aria-controls]=\"panelId()\"\n (click)=\"toggle()\"\n (keydown)=\"onKeydown($event)\"\n>\n <span class=\"gbt-accordion-item__label\">{{ label() }}</span>\n <gbt-icon name=\"chevron-down\" class=\"gbt-accordion-item__chevron\" aria-hidden=\"true\" />\n</button>\n<div\n class=\"gbt-accordion-item__panel\"\n [class.gbt-accordion-item__panel--open]=\"active()\"\n [id]=\"panelId()\"\n [attr.aria-labelledby]=\"headerId()\"\n [attr.inert]=\"active() ? null : ''\"\n>\n <div class=\"gbt-accordion-item__panel-inner\">\n <div class=\"gbt-accordion-item__panel-content\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n"],"mappings":"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"}
|