@masmarino/gabarit 1.4.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +231 -144
- 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 +477 -0
- package/fesm2022/masmarino-gabarit-autocomplete.mjs.map +1 -0
- package/fesm2022/masmarino-gabarit-avatar-group.mjs +199 -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 +1238 -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 +21 -11
- 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 +13 -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 +461 -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 +139 -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 +510 -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 +182 -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/fonts/OFL-ibm-plex.txt +93 -0
- package/fonts/ibm-plex-mono-400.woff2 +0 -0
- package/fonts/ibm-plex-mono-500.woff2 +0 -0
- package/fonts/ibm-plex-sans-400.woff2 +0 -0
- package/fonts/ibm-plex-sans-500.woff2 +0 -0
- package/fonts/ibm-plex-sans-600.woff2 +0 -0
- package/fonts/ibm-plex-sans-condensed-600.woff2 +0 -0
- package/fonts/index.scss +28 -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 +335 -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/src/lib/tokens/_a11y.scss +22 -0
- package/src/lib/tokens/_base.scss +31 -0
- package/src/lib/tokens/_palette.scss +52 -51
- package/src/lib/tokens/_semantic.scss +17 -124
- package/src/lib/tokens/_themes.scss +144 -0
- package/src/lib/tokens/_utilities.scss +10 -10
- package/src/lib/tokens/index.scss +3 -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 +139 -0
- package/types/masmarino-gabarit-avatar-group.d.ts +59 -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 +397 -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 +20 -59
- 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 +7 -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 +92 -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 +32 -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 +145 -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 +38 -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 -6605
- package/user-chip/README.md +42 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
// The themes as mixins, with no output of their own: _semantic puts them on :root, and the parts drawn
|
|
2
|
+
// on the graphite frame (the shell's rail and bar, the sign-in page) take the frame's.
|
|
3
|
+
//
|
|
4
|
+
// Every text token reaches 7:1 on the page and on a panel (contrast.spec.ts), which is why a few of
|
|
5
|
+
// them sit a shade darker (or lighter, in the dark) than the marks of the same colour. The status
|
|
6
|
+
// tints are translucent, so they take the colour of the ground they sit on.
|
|
7
|
+
|
|
8
|
+
@mixin light-tokens {
|
|
9
|
+
--primary: var(--slate-900);
|
|
10
|
+
--primary-hover: #383d43;
|
|
11
|
+
--bg-principal: var(--slate-0);
|
|
12
|
+
--bg-panel: var(--slate-50);
|
|
13
|
+
--bg-hover: rgba(16, 21, 28, 0.07);
|
|
14
|
+
--bg-track: var(--slate-200);
|
|
15
|
+
--bg-inverse: var(--slate-900);
|
|
16
|
+
|
|
17
|
+
// The edge of a field or a control, 3:1 on the page (WCAG 1.4.11); the hairlines stay lighter.
|
|
18
|
+
--border-color: var(--slate-500);
|
|
19
|
+
--gbt-hairline: var(--slate-300);
|
|
20
|
+
--gbt-card-border: var(--slate-300);
|
|
21
|
+
|
|
22
|
+
--text-primary: var(--slate-900);
|
|
23
|
+
--text-secondary: var(--slate-700);
|
|
24
|
+
--text-discret: var(--slate-600);
|
|
25
|
+
--text-on-color: var(--slate-0);
|
|
26
|
+
--text-on-primary: var(--slate-0);
|
|
27
|
+
--text-on-error: var(--slate-0);
|
|
28
|
+
|
|
29
|
+
--accent: var(--rust-500);
|
|
30
|
+
--accent-text: var(--rust-600);
|
|
31
|
+
--focus-ring: var(--rust-500);
|
|
32
|
+
|
|
33
|
+
--color-success-base: var(--patina-600);
|
|
34
|
+
--color-success-text: var(--patina-700);
|
|
35
|
+
--color-success-hover: #146b50;
|
|
36
|
+
--color-success-bg: rgba(21, 128, 93, 0.12);
|
|
37
|
+
--color-success-bg-text: var(--patina-800);
|
|
38
|
+
--color-success-vivid-base: var(--patina-600);
|
|
39
|
+
|
|
40
|
+
--color-warning-base: var(--amber-600);
|
|
41
|
+
--color-warning-text: var(--amber-700);
|
|
42
|
+
--color-warning-hover: #7e4d09;
|
|
43
|
+
--color-warning-bg: rgba(154, 91, 4, 0.1);
|
|
44
|
+
--color-warning-bg-text: var(--amber-800);
|
|
45
|
+
--color-warning-vivid-base: var(--amber-600);
|
|
46
|
+
|
|
47
|
+
--color-error-base: var(--red-600);
|
|
48
|
+
--color-error-fill: var(--red-700);
|
|
49
|
+
--color-error-text: var(--red-750);
|
|
50
|
+
--color-error-hover: #842b27;
|
|
51
|
+
--color-error-bg: rgba(194, 58, 50, 0.1);
|
|
52
|
+
--color-error-bg-text: var(--red-800);
|
|
53
|
+
--color-error-vivid-base: var(--red-600);
|
|
54
|
+
|
|
55
|
+
--color-info-bg: rgba(47, 73, 201, 0.09);
|
|
56
|
+
--color-info-bg-text: var(--indigo-800);
|
|
57
|
+
--color-info-vivid-base: var(--indigo-600);
|
|
58
|
+
|
|
59
|
+
--chart-series-1-base: #bd8200;
|
|
60
|
+
--chart-series-2-base: #009e73;
|
|
61
|
+
--chart-series-3-base: #0072b2;
|
|
62
|
+
--chart-series-4-base: #a6410f;
|
|
63
|
+
--chart-series-5-base: #9c3f78;
|
|
64
|
+
--chart-series-6-base: #5b4fb0;
|
|
65
|
+
--chart-grid: var(--slate-300);
|
|
66
|
+
|
|
67
|
+
--site-shadow-sm: none;
|
|
68
|
+
--site-shadow-md: 0 0 0 1px var(--slate-400);
|
|
69
|
+
--site-shadow-lg: 0 0 0 1px var(--slate-400), 0 12px 32px rgba(16, 21, 28, 0.16);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
@mixin dark-tokens {
|
|
73
|
+
--primary: var(--graphite-100);
|
|
74
|
+
--primary-hover: #c0c5cb;
|
|
75
|
+
--bg-principal: var(--graphite-850);
|
|
76
|
+
--bg-panel: var(--graphite-900);
|
|
77
|
+
--bg-hover: rgba(231, 235, 241, 0.07);
|
|
78
|
+
--bg-track: var(--graphite-700);
|
|
79
|
+
--bg-inverse: var(--graphite-100);
|
|
80
|
+
|
|
81
|
+
--border-color: var(--graphite-500);
|
|
82
|
+
--gbt-hairline: rgba(205, 215, 230, 0.12);
|
|
83
|
+
--gbt-card-border: rgba(205, 215, 230, 0.12);
|
|
84
|
+
|
|
85
|
+
--text-primary: var(--graphite-100);
|
|
86
|
+
--text-secondary: var(--graphite-300);
|
|
87
|
+
--text-discret: var(--graphite-400);
|
|
88
|
+
--text-on-color: var(--graphite-1000);
|
|
89
|
+
--text-on-primary: var(--graphite-1000);
|
|
90
|
+
--text-on-error: var(--graphite-1000);
|
|
91
|
+
|
|
92
|
+
--accent: var(--rust-400);
|
|
93
|
+
--accent-text: var(--rust-300);
|
|
94
|
+
--focus-ring: var(--rust-400);
|
|
95
|
+
|
|
96
|
+
--color-success-base: var(--patina-400);
|
|
97
|
+
--color-success-text: var(--patina-400);
|
|
98
|
+
--color-success-hover: #61c8a7;
|
|
99
|
+
--color-success-bg: rgba(63, 191, 149, 0.16);
|
|
100
|
+
--color-success-bg-text: var(--patina-300);
|
|
101
|
+
--color-success-vivid-base: var(--patina-400);
|
|
102
|
+
|
|
103
|
+
--color-warning-base: var(--amber-400);
|
|
104
|
+
--color-warning-text: var(--amber-400);
|
|
105
|
+
--color-warning-hover: #f2bd61;
|
|
106
|
+
--color-warning-bg: rgba(245, 177, 61, 0.14);
|
|
107
|
+
--color-warning-bg-text: var(--amber-300);
|
|
108
|
+
--color-warning-vivid-base: var(--amber-400);
|
|
109
|
+
|
|
110
|
+
--color-error-base: var(--red-400);
|
|
111
|
+
--color-error-fill: var(--red-400);
|
|
112
|
+
--color-error-text: var(--red-300);
|
|
113
|
+
--color-error-hover: #f09994;
|
|
114
|
+
--color-error-bg: rgba(242, 133, 125, 0.16);
|
|
115
|
+
--color-error-bg-text: var(--red-200);
|
|
116
|
+
--color-error-vivid-base: var(--red-400);
|
|
117
|
+
|
|
118
|
+
--color-info-bg: rgba(139, 155, 255, 0.16);
|
|
119
|
+
--color-info-bg-text: var(--indigo-200);
|
|
120
|
+
--color-info-vivid-base: var(--indigo-400);
|
|
121
|
+
|
|
122
|
+
--chart-series-1-base: #e69f00;
|
|
123
|
+
--chart-series-2-base: #009e73;
|
|
124
|
+
--chart-series-3-base: #0072b2;
|
|
125
|
+
--chart-series-4-base: #e2703a;
|
|
126
|
+
--chart-series-5-base: #d691bd;
|
|
127
|
+
--chart-series-6-base: #9d94e0;
|
|
128
|
+
--chart-grid: rgba(205, 215, 230, 0.12);
|
|
129
|
+
|
|
130
|
+
--site-shadow-sm: none;
|
|
131
|
+
--site-shadow-md: 0 0 0 1px rgba(205, 215, 230, 0.26);
|
|
132
|
+
--site-shadow-lg: 0 0 0 1px rgba(205, 215, 230, 0.26), 0 12px 32px rgba(0, 0, 0, 0.4);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// The graphite frame, the same in both themes: the dark tokens on a ground a little deeper than the
|
|
136
|
+
// dark theme's own. The rail's links are a step brighter, since light thin text on graphite reads
|
|
137
|
+
// paler than its ratio says.
|
|
138
|
+
@mixin frame-tokens {
|
|
139
|
+
@include dark-tokens;
|
|
140
|
+
--bg-panel: var(--graphite-950);
|
|
141
|
+
--text-secondary: var(--graphite-200);
|
|
142
|
+
color-scheme: dark;
|
|
143
|
+
color: var(--text-primary);
|
|
144
|
+
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@use 'a11y';
|
|
2
|
+
|
|
1
3
|
.gbt-form-error {
|
|
2
4
|
margin: 0 0 0.75rem;
|
|
3
5
|
font-size: 0.875rem;
|
|
@@ -85,8 +87,7 @@
|
|
|
85
87
|
}
|
|
86
88
|
}
|
|
87
89
|
|
|
88
|
-
// Global
|
|
89
|
-
// window scrolls rather than squeezing its links together.
|
|
90
|
+
// Global to reach the projected links: a rail taller than the window scrolls instead of squeezing them.
|
|
90
91
|
.gbt-app-shell__nav > * {
|
|
91
92
|
flex-shrink: 0;
|
|
92
93
|
}
|
|
@@ -101,6 +102,7 @@
|
|
|
101
102
|
border-radius: var(--site-border-radius-sm);
|
|
102
103
|
color: var(--text-secondary);
|
|
103
104
|
font-size: 0.875rem;
|
|
105
|
+
font-weight: 500;
|
|
104
106
|
text-decoration: none;
|
|
105
107
|
overflow: hidden;
|
|
106
108
|
white-space: nowrap;
|
|
@@ -118,16 +120,15 @@
|
|
|
118
120
|
}
|
|
119
121
|
|
|
120
122
|
&:focus-visible {
|
|
121
|
-
|
|
122
|
-
outline-offset: -2px;
|
|
123
|
+
@include a11y.focus-ring(-2px);
|
|
123
124
|
}
|
|
124
125
|
|
|
125
126
|
// An app can tone the current page down to a tint with a mark on its edge (--gbt-nav-active-*).
|
|
126
127
|
&[aria-current] {
|
|
127
|
-
background: var(--gbt-nav-active-bg, var(--primary));
|
|
128
|
-
color: var(--gbt-nav-active-text, var(--text-
|
|
128
|
+
background: var(--gbt-nav-active-bg, color-mix(in srgb, var(--text-primary) 9%, transparent));
|
|
129
|
+
color: var(--gbt-nav-active-text, var(--text-primary));
|
|
129
130
|
font-weight: 600;
|
|
130
|
-
box-shadow: inset 2px 0 0 var(--gbt-nav-active-mark,
|
|
131
|
+
box-shadow: inset 2px 0 0 var(--gbt-nav-active-mark, var(--accent));
|
|
131
132
|
}
|
|
132
133
|
}
|
|
133
134
|
|
|
@@ -223,7 +224,7 @@
|
|
|
223
224
|
gap: 0.5rem;
|
|
224
225
|
width: 100%;
|
|
225
226
|
padding: 8px 10px;
|
|
226
|
-
border-radius: var(--gbt-radius-menu,
|
|
227
|
+
border-radius: var(--gbt-radius-menu, 4px);
|
|
227
228
|
color: var(--text-primary);
|
|
228
229
|
font-size: 14px;
|
|
229
230
|
text-align: left;
|
|
@@ -238,8 +239,7 @@
|
|
|
238
239
|
}
|
|
239
240
|
|
|
240
241
|
&:focus-visible {
|
|
241
|
-
|
|
242
|
-
outline-offset: -2px;
|
|
242
|
+
@include a11y.focus-ring(-2px);
|
|
243
243
|
}
|
|
244
244
|
}
|
|
245
245
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# StatGrid
|
|
2
|
+
|
|
3
|
+
A responsive grid of [`gbt-stat-tile`](../stat-tile/README.md)s: two columns, and up to `columns` once the grid
|
|
4
|
+
is 600 px wide.
|
|
5
|
+
|
|
6
|
+
**Selector**: `gbt-stat-grid`
|
|
7
|
+
|
|
8
|
+
## Inputs
|
|
9
|
+
|
|
10
|
+
| Input | Type | Default | Role |
|
|
11
|
+
| -------------- | ----------------------- | ------------ | ------------------------------------------------------------- |
|
|
12
|
+
| `ariaLabel` | `string` | `'Summary'` | Names the list of tiles. |
|
|
13
|
+
| `columns` | `2 \| 3 \| 4 \| 5 \| 6` | `4` | Columns once the grid is 600 px wide or more (below that: 2). |
|
|
14
|
+
| `loading` | `boolean` | `false` | Shows placeholder tiles instead of the projected tiles. |
|
|
15
|
+
| `loadingCount` | `number` | `4` | Number of placeholder tiles. `0` or less: none, only the status region (same convention as `SkeletonList`'s `rows`). |
|
|
16
|
+
| `loadingLabel` | `string` | `'Loading…'` | Read out (visually hidden, polite) while `loading`. |
|
|
17
|
+
|
|
18
|
+
## Behaviour
|
|
19
|
+
|
|
20
|
+
- **Container query**: `container: gbt-stat-grid / inline-size`, breakpoint at 600 px of the GRID's width (custom
|
|
21
|
+
properties cannot be read in a container condition, so it is fixed). A grid in a 700 px column next to an aside
|
|
22
|
+
behaves like a grid on a 700 px page. The `MediumFrame` and `NarrowFrame` stories show it.
|
|
23
|
+
- **Containment side effect**: `container-type: inline-size` also applies layout containment to the grid, so a
|
|
24
|
+
`position: fixed` descendant (a popover or menu panel inside a tile) is placed against the grid, not the viewport.
|
|
25
|
+
Keep fixed-position overlays out of the tiles.
|
|
26
|
+
- **List semantics**: `role="list"` named by `ariaLabel`; the tiles are its `role="listitem"`s (a tile detects
|
|
27
|
+
its grid by injection: it gets the role only there).
|
|
28
|
+
- **Loading**: placeholders have a loaded tile's border, radius and padding, so nothing moves when the figures
|
|
29
|
+
arrive. The real tiles are not rendered meanwhile; the list is `aria-hidden` and a `role="status"` region
|
|
30
|
+
(outside the list, always in the DOM) says `loadingLabel`. No `aria-busy` is set: some assistive technology
|
|
31
|
+
would hold the status back.
|
|
32
|
+
- Tiles project directly into the grid: `<gbt-stat-tile>` elements as direct children (a wrapper `div` would
|
|
33
|
+
lose the list-item role).
|
|
34
|
+
|
|
35
|
+
## Example
|
|
36
|
+
|
|
37
|
+
```html
|
|
38
|
+
<gbt-stat-grid ariaLabel="Overview" [columns]="4" [loading]="!stats()">
|
|
39
|
+
@for (tile of stats(); track tile.key) {
|
|
40
|
+
<gbt-stat-tile [label]="tile.label" [value]="tile.value" [icon]="tile.icon" />
|
|
41
|
+
}
|
|
42
|
+
</gbt-stat-grid>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Accessibility
|
|
46
|
+
|
|
47
|
+
See [AUDIT.md](AUDIT.md).
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# StatTile
|
|
2
|
+
|
|
3
|
+
A figure with its label: "12 open issues", "3.4 GB stored". The figure and an optional icon marker on
|
|
4
|
+
top, the label under them, then an optional hint and trend.
|
|
5
|
+
|
|
6
|
+
**Selector**: `gbt-stat-tile`, plus the router-agnostic link anchor `a[gbtStatTileLink]` (class `StatTileLink`,
|
|
7
|
+
import it to get the stretched hit area). Put tiles in a [`gbt-stat-grid`](../stat-grid/README.md).
|
|
8
|
+
|
|
9
|
+
## Inputs
|
|
10
|
+
|
|
11
|
+
| Input | Type | Default | Role |
|
|
12
|
+
| ------------ | ----------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------ |
|
|
13
|
+
| `label` | `string` | `''` | The label under the figure. Not needed when a `gbtStatTileLink` is projected (its text is the label). |
|
|
14
|
+
| `value` | `string \| number` | — | Required. The figure, shown as is (format it: `1,284`, `3.4 GB`). |
|
|
15
|
+
| `icon` | `string \| null` | `null` | Registered icon name, on a tile-shaped [`gbt-icon-marker`](../icon-marker/README.md). |
|
|
16
|
+
| `iconTone` | `IconMarkerTone` | `'info'` | Tone of that marker. |
|
|
17
|
+
| `hint` | `string \| null` | `null` | A precision under the label ("last 30 days"). |
|
|
18
|
+
| `trend` | `'up' \| 'down' \| 'flat' \| null` | `null` | An arrow. Shown only with a `trendLabel`. |
|
|
19
|
+
| `trendLabel` | `string \| null` | `null` | The trend as text, with its sign or wording ("+12 %"): an arrow alone says nothing to a screen reader. |
|
|
20
|
+
| `trendTone` | `'neutral' \| 'success' \| 'error'` | `'neutral'` | Colours the trend by whether the movement is good or bad, whichever the direction. |
|
|
21
|
+
| `href` | `string \| null` | `null` | Turns the label into a link whose hit area is the whole tile. |
|
|
22
|
+
| `muted` | `boolean` | `false` | The tile steps back (quiet figure, neutral marker): a category with nothing in it. |
|
|
23
|
+
|
|
24
|
+
## Reading order
|
|
25
|
+
|
|
26
|
+
The label comes **first in the DOM**, the figure second (the grid areas put the figure on top): a screen
|
|
27
|
+
reader says "Open issues, 12". Do not swap them.
|
|
28
|
+
|
|
29
|
+
## Link
|
|
30
|
+
|
|
31
|
+
`href` renders the label as an anchor. With a router, project the anchor and let it replace the label:
|
|
32
|
+
|
|
33
|
+
```html
|
|
34
|
+
<gbt-stat-tile [value]="issues().length" icon="circle-dot">
|
|
35
|
+
<a gbtStatTileLink [routerLink]="['/issues']">Open issues</a>
|
|
36
|
+
</gbt-stat-tile>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
If you forget to import `StatTileLink`, the projected anchor is still rendered with its text (the selector matches the
|
|
40
|
+
attribute), only unstyled: no stretched hit area and no tile hover, so a missing import is visible, never a silent empty label.
|
|
41
|
+
|
|
42
|
+
The anchor's `::after` covers the tile (the tile is `position: relative`); its keyboard focus outlines the
|
|
43
|
+
whole tile. No interactive element is nested in another.
|
|
44
|
+
|
|
45
|
+
## Narrow tiles
|
|
46
|
+
|
|
47
|
+
The tile is a size container named `gbt-stat-tile`: under 11 rem it tightens its padding and uses a smaller
|
|
48
|
+
figure (1.375 rem) so `1,284` is not cut, whatever the grid or the viewport. A figure that is still too long is
|
|
49
|
+
cut with an ellipsis, never overflowing. A tile outside a grid needs a definite width (a block).
|
|
50
|
+
|
|
51
|
+
**Containment side effect.** `container-type: inline-size` also applies layout containment to the host: a
|
|
52
|
+
`position: fixed` descendant (a popover, tooltip or menu panel projected into the tile) is placed against the tile,
|
|
53
|
+
not the viewport. Do not put a fixed-position overlay inside a tile; open it from outside (or use a native popover
|
|
54
|
+
in the top layer).
|
|
55
|
+
|
|
56
|
+
## Example
|
|
57
|
+
|
|
58
|
+
```html
|
|
59
|
+
<gbt-stat-grid ariaLabel="Summary">
|
|
60
|
+
<gbt-stat-tile
|
|
61
|
+
label="Repositories"
|
|
62
|
+
value="1,284"
|
|
63
|
+
icon="folder"
|
|
64
|
+
hint="last 30 days"
|
|
65
|
+
trend="up"
|
|
66
|
+
trendLabel="+12 %"
|
|
67
|
+
trendTone="success"
|
|
68
|
+
/>
|
|
69
|
+
<gbt-stat-tile label="Storage used" value="3.4 GB" icon="database" />
|
|
70
|
+
</gbt-stat-grid>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Accessibility
|
|
74
|
+
|
|
75
|
+
See [AUDIT.md](AUDIT.md).
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Stepper
|
|
2
|
+
|
|
3
|
+
An informational progress indicator through numbered steps (a
|
|
4
|
+
checkout tunnel, a multi-screen setup wizard) — distinct from
|
|
5
|
+
`SegmentedControl` (an exclusive choice) and `Tabs` (free navigation
|
|
6
|
+
between contents): a step can't be skipped, and this component itself
|
|
7
|
+
never navigates anywhere.
|
|
8
|
+
|
|
9
|
+
**Selector**: `gbt-stepper`
|
|
10
|
+
|
|
11
|
+
## Inputs
|
|
12
|
+
|
|
13
|
+
| Input | Type | Default | Role |
|
|
14
|
+
| ----------------- | --------------------------------- | --------------- | ------------------------------------------------------------------ |
|
|
15
|
+
| `steps` | `{ label: string; hasError?: boolean }[]` | required | The steps, in order. |
|
|
16
|
+
| `activeIndex` | `number` (model) | `0` | The current step's index. |
|
|
17
|
+
| `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` | — |
|
|
18
|
+
| `completedLabel` | `string` | `'Completed'` | Visually-hidden suffix announced for a completed step. |
|
|
19
|
+
| `errorLabel` | `string` | `'Error'` | Visually-hidden suffix announced for a step with `hasError`. |
|
|
20
|
+
| `interactive` | `boolean` | `false` | Renders each step as a native button that sets `selectedIndex`. |
|
|
21
|
+
| `selectedIndex` | `number \| null` (model) | `null` | The step being viewed (interactive mode only); distinct from `activeIndex`. |
|
|
22
|
+
| `selectedLabel` | `string` | `'Selected'` | Visually-hidden suffix announced for the selected step. |
|
|
23
|
+
|
|
24
|
+
## Example
|
|
25
|
+
|
|
26
|
+
```html
|
|
27
|
+
<gbt-stepper
|
|
28
|
+
[steps]="[{ label: 'Account' }, { label: 'Shipping' }, { label: 'Payment' }]"
|
|
29
|
+
[activeIndex]="step()"
|
|
30
|
+
/>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Interactive mode
|
|
34
|
+
|
|
35
|
+
With `interactive`, every step becomes a real `<button type="button">`
|
|
36
|
+
inside its `<li>`. Clicking one only sets `selectedIndex` — the step
|
|
37
|
+
being *viewed* — while `activeIndex` stays the progress (and keeps
|
|
38
|
+
`aria-current="step"`). The consumer decides what a selection does:
|
|
39
|
+
|
|
40
|
+
```html
|
|
41
|
+
<gbt-stepper
|
|
42
|
+
[steps]="steps"
|
|
43
|
+
[activeIndex]="progress()"
|
|
44
|
+
[interactive]="true"
|
|
45
|
+
[(selectedIndex)]="viewed"
|
|
46
|
+
/>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Behavior
|
|
50
|
+
|
|
51
|
+
- Informational by default: without `interactive`, no click handler on
|
|
52
|
+
a step and no keyboard navigation of its own — this component only
|
|
53
|
+
ever *reflects* `activeIndex`, it never changes it. With
|
|
54
|
+
`interactive`, a click only sets `selectedIndex`; `activeIndex` is
|
|
55
|
+
never modified by this component.
|
|
56
|
+
- A step's status is derived purely from its position relative to
|
|
57
|
+
`activeIndex` (`completed` before it, `current` at it, `upcoming`
|
|
58
|
+
after it) and its own `hasError` — a step marked `hasError` only
|
|
59
|
+
shows as `error` once reached (at or before `activeIndex`), never
|
|
60
|
+
for a step further ahead that hasn't happened yet.
|
|
61
|
+
- Renders a real `<ol>`/`<li>` list — every step is rendered directly
|
|
62
|
+
by this component's own template (via the `steps` data array, not
|
|
63
|
+
content-projected per-step components), the same reasoning
|
|
64
|
+
`DescriptionList` already applied to `<dl>`/`<dt>`/`<dd>`: axe's
|
|
65
|
+
list-structure rule requires `<li>` to be a direct child of a
|
|
66
|
+
`<ul>`/`<ol>`, which a per-step custom element (even one set to
|
|
67
|
+
`display: contents`) does not satisfy.
|
package/switch/README.md
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Switch
|
|
2
|
+
|
|
3
|
+
Bascule on/off — alternative visuelle à `Checkbox` pour un réglage
|
|
4
|
+
binaire immédiat (ex. activer une option), plutôt qu'une sélection
|
|
5
|
+
dans un formulaire à valider.
|
|
6
|
+
|
|
7
|
+
**Selector**: `gbt-switch`
|
|
8
|
+
|
|
9
|
+
## Inputs
|
|
10
|
+
|
|
11
|
+
| Input | Type | Default | Role |
|
|
12
|
+
| ---------- | --------- | ------- | -------------------------------------------------------------------- |
|
|
13
|
+
| `id` | `string` | généré | `id` du champ natif. |
|
|
14
|
+
| `label` | `string` | `''` | Texte affiché à côté de la bascule. |
|
|
15
|
+
| `disabled` | `boolean` | `false` | Désactive le contrôle. |
|
|
16
|
+
| `hint` | `string` | `''` | Texte d'aide sous le libellé, relié au champ par `aria-describedby`. |
|
|
17
|
+
|
|
18
|
+
S'intègre aux formulaires Angular via `ControlValueAccessor`, comme
|
|
19
|
+
`Checkbox` — utilisable indifféremment avec `formControlName` ou
|
|
20
|
+
`[formControl]`.
|
|
21
|
+
|
|
22
|
+
## Exemple
|
|
23
|
+
|
|
24
|
+
```html
|
|
25
|
+
<gbt-switch label="Recevoir les notifications" formControlName="notifications" />
|
|
26
|
+
|
|
27
|
+
<gbt-switch
|
|
28
|
+
label="Envoyer un résumé quotidien"
|
|
29
|
+
hint="Un e-mail par jour, à 8 h."
|
|
30
|
+
formControlName="digest"
|
|
31
|
+
/>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Texte d'aide (`hint`)
|
|
35
|
+
|
|
36
|
+
Sans `hint`, le rendu ne comporte aucun élément supplémentaire (hôte inline).
|
|
37
|
+
Avec `hint`, l'hôte devient un bloc et le texte
|
|
38
|
+
s'affiche sous le libellé, aligné sur celui-ci (piste 2,25 rem + espace
|
|
39
|
+
0,5 rem) — plus besoin d'une indentation « magique » côté application.
|
|
40
|
+
Le texte est un `<p>` **hors** du `<label>` : il décrit le champ
|
|
41
|
+
(`aria-describedby`) sans s'ajouter à son nom accessible.
|
|
42
|
+
|
|
43
|
+
## Accessibilité
|
|
44
|
+
|
|
45
|
+
Basé sur `<input type="checkbox" role="switch">` — tout le
|
|
46
|
+
comportement natif (Space pour basculer, participation aux
|
|
47
|
+
formulaires, focus) est conservé ; `role="switch"` fait annoncer
|
|
48
|
+
"interrupteur" par les lecteurs d'écran plutôt que "case à cocher".
|
|
49
|
+
L'entrée native est visuellement masquée (`opacity: 0`) mais reste
|
|
50
|
+
dans l'arbre d'accessibilité et la zone cliquable — le rendu piste +
|
|
51
|
+
curseur est purement du CSS piloté par `:checked`, sans JavaScript.
|
package/table/README.md
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Table
|
|
2
|
+
|
|
3
|
+
Data table with optional clickable rows.
|
|
4
|
+
|
|
5
|
+
**Selector**: `gbt-table`
|
|
6
|
+
|
|
7
|
+
## Inputs
|
|
8
|
+
|
|
9
|
+
| Input | Type | Default | Role |
|
|
10
|
+
| --------------- | ------------------------------- | ----------- | -------------------------------------------------- |
|
|
11
|
+
| `data` | `T[]` | required | The rows. |
|
|
12
|
+
| `columns` | `TableColumn<T>[]` | required | `{ key, label, format?, cellTemplate? }` — the columns, in order. |
|
|
13
|
+
| `trackBy` | `((row: T) => unknown) \| null` | `null` | Row tracking function. |
|
|
14
|
+
| `emptyMessage` | `string` | `'No data'` | Message shown when `data` is empty. |
|
|
15
|
+
| `caption` | `string` | required | Table caption. |
|
|
16
|
+
| `clickableRows` | `boolean` | `false` | Makes rows focusable and keyboard-activatable. |
|
|
17
|
+
|
|
18
|
+
## Outputs
|
|
19
|
+
|
|
20
|
+
| Output | Type | Role |
|
|
21
|
+
| ---------- | ---- | ------------------------------------------------------------------------ |
|
|
22
|
+
| `rowClick` | `T` | Emitted on click or keyboard activation of a row (`clickableRows` only). |
|
|
23
|
+
|
|
24
|
+
## Example
|
|
25
|
+
|
|
26
|
+
```html
|
|
27
|
+
<gbt-table
|
|
28
|
+
caption="Dépôts"
|
|
29
|
+
[data]="depots"
|
|
30
|
+
[columns]="[{ key: 'nom', label: 'Nom' }, { key: 'taille', label: 'Taille' }]"
|
|
31
|
+
/>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Rich cell content: `cellTemplate`
|
|
35
|
+
|
|
36
|
+
A column's `format`/`key` can only ever produce plain text — there is
|
|
37
|
+
no way to put a link, a `Badge`, or a `Menu` in a cell through them.
|
|
38
|
+
`cellTemplate` renders a `TemplateRef` instead, with the row projected
|
|
39
|
+
as the template's `$implicit` context (the same escape hatch
|
|
40
|
+
`DescriptionList` offers for a value, adapted here to run once per
|
|
41
|
+
row):
|
|
42
|
+
|
|
43
|
+
```html
|
|
44
|
+
<ng-template #actionsCell let-repo>
|
|
45
|
+
<gbt-menu label="Actions" triggerIcon="ellipsis-vertical">
|
|
46
|
+
<button role="menuitem" class="gbt-menu__item" type="button" (click)="delete(repo)">Supprimer</button>
|
|
47
|
+
</gbt-menu>
|
|
48
|
+
</ng-template>
|
|
49
|
+
|
|
50
|
+
<gbt-table
|
|
51
|
+
caption="Dépôts"
|
|
52
|
+
[data]="depots"
|
|
53
|
+
[columns]="[
|
|
54
|
+
{ key: 'nom', label: 'Nom' },
|
|
55
|
+
{ key: 'actions', label: 'Actions', cellTemplate: actionsCell },
|
|
56
|
+
]"
|
|
57
|
+
/>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
`key` still identifies the column (for `@for` tracking) even on a
|
|
61
|
+
template-only column — it doesn't have to name a real property of `T`,
|
|
62
|
+
a synthetic name like `'actions'` is fine since `format`/`row[key]` is
|
|
63
|
+
never reached for that column.
|
|
64
|
+
|
|
65
|
+
A `cellTemplate` cell is the consumer's own content, so its
|
|
66
|
+
accessibility is the consumer's responsibility — same delegation
|
|
67
|
+
`Table` already applies to `format`'s plain text, extended to richer
|
|
68
|
+
markup. An interactive element inside a `cellTemplate` (a link, a
|
|
69
|
+
`Menu` trigger) works normally with `Tab`/`Enter` since it's ordinary
|
|
70
|
+
projected DOM inside a `<td>`, nothing about `Table` intercepts it.
|
|
71
|
+
Combining it with `clickableRows` is supported: a click or `Enter`/`Space` on the projected
|
|
72
|
+
interactive element (a native control, a `<label>`, a `<summary>`, a `contenteditable` region, or an
|
|
73
|
+
element carrying an interactive WAI-ARIA widget role such as `button`, `link`, `checkbox`, `switch`,
|
|
74
|
+
`radio`, `tab`, `option`, `menuitem`, `textbox`, `searchbox`, `slider`) activates that element only
|
|
75
|
+
— it does not also fire `rowClick` — while the same click or key elsewhere in the row still does.
|
package/tabs/README.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Tabs
|
|
2
|
+
|
|
3
|
+
Tab navigation, with `gbt-tab` as projected content.
|
|
4
|
+
|
|
5
|
+
**Selector**: `gbt-tabs` (container), `gbt-tab` (each tab)
|
|
6
|
+
|
|
7
|
+
Left/right arrows to move between triggers, with wraparound.
|
|
8
|
+
|
|
9
|
+
`activeIndex` is an Angular `model()`, so it works uncontrolled (omit
|
|
10
|
+
the binding entirely, as every existing usage does) or controlled
|
|
11
|
+
(bind `[activeIndex]`/`(activeIndexChange)` to keep it in sync with,
|
|
12
|
+
e.g., a URL query parameter).
|
|
13
|
+
|
|
14
|
+
## Inputs of `gbt-tabs`
|
|
15
|
+
|
|
16
|
+
| Input | Type | Default | Role |
|
|
17
|
+
| ----- | -------- | ------------------------ | ------------------------------------------------------- |
|
|
18
|
+
| `id` | `string` | generated (`gbt-tabs-N`) | Prefix of the DOM ids generated for each trigger/panel. |
|
|
19
|
+
| `activeIndex` | `number` (model) | `0` | The active tab's index. Bind `[activeIndex]` (one-way — `Tabs` still updates it internally on click/arrow-key) or `[(activeIndex)]` (two-way) to control or observe it from outside. |
|
|
20
|
+
|
|
21
|
+
## Inputs of `gbt-tab`
|
|
22
|
+
|
|
23
|
+
| Input | Type | Role |
|
|
24
|
+
| ------- | -------- | ------------------------ |
|
|
25
|
+
| `label` | `string` | Required. Trigger label. |
|
|
26
|
+
|
|
27
|
+
## Example
|
|
28
|
+
|
|
29
|
+
```html
|
|
30
|
+
<gbt-tabs>
|
|
31
|
+
<gbt-tab label="Détails">...</gbt-tab>
|
|
32
|
+
<gbt-tab label="Historique">...</gbt-tab>
|
|
33
|
+
</gbt-tabs>
|
|
34
|
+
```
|
package/tag/README.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Tag
|
|
2
|
+
|
|
3
|
+
A small chip rendering an arbitrary background color with automatically
|
|
4
|
+
computed readable text, used for user-defined labels (e.g. issue labels)
|
|
5
|
+
that don't fit the fixed `Badge` semantic variants. Optionally removable.
|
|
6
|
+
|
|
7
|
+
**Selector:** `gbt-tag`
|
|
8
|
+
|
|
9
|
+
**Inputs**
|
|
10
|
+
|
|
11
|
+
| Input | Type | Default | Role |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| `color` | `string` (required) | — | Background color as a **6-digit hex** string, with or without the leading `#` (e.g. `#dc2626`, `dc2626`). Text color is computed automatically for WCAG-readable contrast (`#ffffff` or `#000000`, worst case 4.58:1). Shorthand hex (`#abc`), CSS named colors, `rgb()`/`hsl()` and custom properties are **not** supported and throw — silently guessing would paint unreadable text. |
|
|
14
|
+
| `removable` | `boolean` | `false` | Shows a remove (`×`) button when `true`. |
|
|
15
|
+
| `removeLabel` | `string` | `'Remove'` | Accessible label for the remove button. English by default, like every other default string in the library — externalize it per the caller's own i18n strings in a non-English context. |
|
|
16
|
+
| `disabled` | `boolean` | `false` | Marks the chip `aria-disabled="true"` — for a container-level disabled state (e.g. `TagInput`, `Select` in chips mode) that visually dims the chip via CSS `opacity`, so contrast-checking tools recognize it as an inactive component rather than flagging its now-lower-contrast text. Purely an ARIA signal — pair it with `[removable]="false"` to actually remove the remove button. |
|
|
17
|
+
|
|
18
|
+
**Outputs**
|
|
19
|
+
|
|
20
|
+
| Output | Payload | Fires when |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| `removed` | `void` | The remove button is clicked. The click does not bubble to any parent click handler. |
|
|
23
|
+
|
|
24
|
+
**Content**
|
|
25
|
+
|
|
26
|
+
Project the tag's visible text via `<ng-content />`.
|
|
27
|
+
|
|
28
|
+
**Example**
|
|
29
|
+
|
|
30
|
+
```html
|
|
31
|
+
<gbt-tag color="#dc2626" [removable]="true" removeLabel="Retirer Bug" (removed)="onRemoveLabel()">
|
|
32
|
+
Bug
|
|
33
|
+
</gbt-tag>
|
|
34
|
+
```
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# TagInput
|
|
2
|
+
|
|
3
|
+
Freely-typed values, each shown as a removable `Tag` — for values the
|
|
4
|
+
consumer invents (custom labels, email recipients), not chosen from a
|
|
5
|
+
predefined list. Distinct from `Select`'s chips, which pick among
|
|
6
|
+
fixed options. Integrates with Angular forms via
|
|
7
|
+
`ControlValueAccessor` (`string[]`), like `Select`.
|
|
8
|
+
|
|
9
|
+
**Selector**: `gbt-tag-input`
|
|
10
|
+
|
|
11
|
+
## Inputs
|
|
12
|
+
|
|
13
|
+
| Input | Type | Default | Role |
|
|
14
|
+
| ------------------ | ------------------------------- | -------------------------------- | --------------------------------------------------------------- |
|
|
15
|
+
| `label` | `string` | `''` | Field label. |
|
|
16
|
+
| `placeholder` | `string` | `''` | Shown only while the list of tags is empty. |
|
|
17
|
+
| `disabled` | `boolean` | `false` | — |
|
|
18
|
+
| `errorMessage` | `string \| null` | `null` | Rendered as `role="alert"` below the field. |
|
|
19
|
+
| `separatorKeys` | `string[]` | `['Enter', ',']` | Keys that commit the current text as a new tag. |
|
|
20
|
+
| `allowDuplicates` | `boolean` | `false` | Silently ignores a duplicate value when `false`. |
|
|
21
|
+
| `color` | `string` | `'#6b7280'` | Background color passed to each `Tag` (a 6-digit hex, per `Tag`'s own contract). |
|
|
22
|
+
| `removeLabel` | `(value: string) => string` | `` (v) => `Remove ${v}` `` | Accessible name of each tag's remove button. |
|
|
23
|
+
|
|
24
|
+
## Example
|
|
25
|
+
|
|
26
|
+
```html
|
|
27
|
+
<gbt-tag-input label="Labels" placeholder="Add a label…" [formControl]="labels" />
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Behavior
|
|
31
|
+
|
|
32
|
+
- Typing text and pressing a `separatorKeys` key (Enter or comma by
|
|
33
|
+
default) commits it as a new tag and clears the field. A pending
|
|
34
|
+
draft is also committed on blur, so nothing is silently lost if the
|
|
35
|
+
user clicks away instead of pressing Enter.
|
|
36
|
+
- `Backspace` on an *empty* field removes the last tag — the same
|
|
37
|
+
convenience most tag/recipient fields offer (Gmail's "To" field,
|
|
38
|
+
GitHub's label picker), not triggered while there's still text to
|
|
39
|
+
delete normally.
|
|
40
|
+
- Clicking anywhere in the field (not just precisely on the thin text
|
|
41
|
+
input) focuses it — a documented lint exception, since the real
|
|
42
|
+
keyboard equivalent (Tab to the input directly) already exists; see
|
|
43
|
+
`AUDIT.md`.
|
|
44
|
+
- Reuses `gbt-tag` for display, inheriting its automatic
|
|
45
|
+
readable-text-color computation — no separate contrast logic here.
|