@signal9/era-ui 1.1.2
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/dist/dev/audit/audits/_helpers.d.ts +5 -0
- package/dist/dev/audit/audits/_helpers.js +11 -0
- package/dist/dev/audit/audits/concentric-inset.d.ts +2 -0
- package/dist/dev/audit/audits/concentric-inset.js +33 -0
- package/dist/dev/audit/audits/index.d.ts +4 -0
- package/dist/dev/audit/audits/index.js +9 -0
- package/dist/dev/audit/audits/uniform-sibling-gaps.d.ts +2 -0
- package/dist/dev/audit/audits/uniform-sibling-gaps.js +29 -0
- package/dist/dev/audit/audits/wall-matches-gap.d.ts +2 -0
- package/dist/dev/audit/audits/wall-matches-gap.js +30 -0
- package/dist/dev/audit/index.d.ts +4 -0
- package/dist/dev/audit/index.js +3 -0
- package/dist/dev/audit/registry.d.ts +13 -0
- package/dist/dev/audit/registry.js +50 -0
- package/dist/dev/audit/runner.d.ts +3 -0
- package/dist/dev/audit/runner.js +27 -0
- package/dist/dev/audit/types.d.ts +28 -0
- package/dist/dev/audit/types.js +7 -0
- package/dist/dev/audit-overlay.svelte +125 -0
- package/dist/dev/audit-overlay.svelte.d.ts +9 -0
- package/dist/dev/index.d.ts +2 -0
- package/dist/dev/index.js +2 -0
- package/dist/docs/badge.md +18 -0
- package/dist/docs/bits-ui-audit.md +58 -0
- package/dist/docs/button.md +18 -0
- package/dist/docs/chip.md +20 -0
- package/dist/docs/component-docs-core.d.ts +8 -0
- package/dist/docs/component-docs-core.js +72 -0
- package/dist/docs/component-docs.d.ts +2 -0
- package/dist/docs/component-docs.js +25 -0
- package/dist/docs/component-source-scanners.d.ts +18 -0
- package/dist/docs/component-source-scanners.js +46 -0
- package/dist/docs/extract-props.d.ts +13 -0
- package/dist/docs/extract-props.js +324 -0
- package/dist/docs/generated-docs.d.ts +4 -0
- package/dist/docs/generated-docs.js +23 -0
- package/dist/docs/index.d.ts +5 -0
- package/dist/docs/index.js +62 -0
- package/dist/docs/llms-txt.d.ts +2 -0
- package/dist/docs/llms-txt.js +84 -0
- package/dist/docs/quickstart.md +43 -0
- package/dist/docs/separator.md +20 -0
- package/dist/docs/table.md +35 -0
- package/dist/era-ui.css +2 -0
- package/dist/generated-docs/accordion.md +57 -0
- package/dist/generated-docs/alert-dialog.md +81 -0
- package/dist/generated-docs/aspect-ratio.md +17 -0
- package/dist/generated-docs/avatar.md +39 -0
- package/dist/generated-docs/badge.md +38 -0
- package/dist/generated-docs/bar.md +19 -0
- package/dist/generated-docs/button-group.md +19 -0
- package/dist/generated-docs/button.md +46 -0
- package/dist/generated-docs/calendar.md +126 -0
- package/dist/generated-docs/card.md +26 -0
- package/dist/generated-docs/checkbox.md +42 -0
- package/dist/generated-docs/chip.md +40 -0
- package/dist/generated-docs/code-block.md +20 -0
- package/dist/generated-docs/collapsible.md +30 -0
- package/dist/generated-docs/combobox.md +74 -0
- package/dist/generated-docs/command.md +123 -0
- package/dist/generated-docs/context-menu.md +94 -0
- package/dist/generated-docs/date-field.md +49 -0
- package/dist/generated-docs/date-picker.md +180 -0
- package/dist/generated-docs/date-range-field.md +50 -0
- package/dist/generated-docs/date-range-picker.md +180 -0
- package/dist/generated-docs/dialog.md +70 -0
- package/dist/generated-docs/draggable.md +3 -0
- package/dist/generated-docs/dropdown-menu.md +94 -0
- package/dist/generated-docs/file-upload.md +18 -0
- package/dist/generated-docs/input.md +18 -0
- package/dist/generated-docs/kv.md +20 -0
- package/dist/generated-docs/label.md +17 -0
- package/dist/generated-docs/link-preview.md +30 -0
- package/dist/generated-docs/llms-full.txt +3104 -0
- package/dist/generated-docs/llms.txt +34 -0
- package/dist/generated-docs/manifest.json +812 -0
- package/dist/generated-docs/menu.md +11 -0
- package/dist/generated-docs/menubar.md +103 -0
- package/dist/generated-docs/meter.md +17 -0
- package/dist/generated-docs/mode.md +24 -0
- package/dist/generated-docs/navigation-menu.md +11 -0
- package/dist/generated-docs/pagination.md +55 -0
- package/dist/generated-docs/pane.md +30 -0
- package/dist/generated-docs/pin-input.md +31 -0
- package/dist/generated-docs/popover.md +43 -0
- package/dist/generated-docs/progress.md +17 -0
- package/dist/generated-docs/quickstart.md +47 -0
- package/dist/generated-docs/radio-group.md +31 -0
- package/dist/generated-docs/range-calendar.md +11 -0
- package/dist/generated-docs/rating-group.md +31 -0
- package/dist/generated-docs/scroll-area.md +57 -0
- package/dist/generated-docs/select.md +49 -0
- package/dist/generated-docs/separator.md +39 -0
- package/dist/generated-docs/sheet.md +11 -0
- package/dist/generated-docs/skeleton.md +18 -0
- package/dist/generated-docs/slider.md +71 -0
- package/dist/generated-docs/surfaces.md +3 -0
- package/dist/generated-docs/switch.md +18 -0
- package/dist/generated-docs/table.md +113 -0
- package/dist/generated-docs/tabs.md +48 -0
- package/dist/generated-docs/time-field.md +49 -0
- package/dist/generated-docs/time-range-field.md +50 -0
- package/dist/generated-docs/toggle-group.md +30 -0
- package/dist/generated-docs/toggle.md +20 -0
- package/dist/generated-docs/toolbar.md +11 -0
- package/dist/generated-docs/tooltip.md +30 -0
- package/dist/generated-docs/video-player.md +73 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/styles/density.css +274 -0
- package/dist/styles/index.css +77 -0
- package/dist/styles/motion.css +56 -0
- package/dist/styles/surfaces/base.css +103 -0
- package/dist/styles/surfaces/bevel.css +71 -0
- package/dist/styles/surfaces/cartoon.css +27 -0
- package/dist/styles/surfaces/glass.css +127 -0
- package/dist/styles/themes.css +351 -0
- package/dist/styles/typography.css +28 -0
- package/dist/ui/accordion/accordion-content.svelte +15 -0
- package/dist/ui/accordion/accordion-content.svelte.d.ts +4 -0
- package/dist/ui/accordion/accordion-header.svelte +8 -0
- package/dist/ui/accordion/accordion-header.svelte.d.ts +4 -0
- package/dist/ui/accordion/accordion-item.svelte +12 -0
- package/dist/ui/accordion/accordion-item.svelte.d.ts +4 -0
- package/dist/ui/accordion/accordion-trigger.svelte +24 -0
- package/dist/ui/accordion/accordion-trigger.svelte.d.ts +5 -0
- package/dist/ui/accordion/accordion.svelte +8 -0
- package/dist/ui/accordion/accordion.svelte.d.ts +4 -0
- package/dist/ui/accordion/index.d.ts +5 -0
- package/dist/ui/accordion/index.js +5 -0
- package/dist/ui/alert-dialog/alert-dialog-action.svelte +41 -0
- package/dist/ui/alert-dialog/alert-dialog-action.svelte.d.ts +9 -0
- package/dist/ui/alert-dialog/alert-dialog-cancel.svelte +39 -0
- package/dist/ui/alert-dialog/alert-dialog-cancel.svelte.d.ts +9 -0
- package/dist/ui/alert-dialog/alert-dialog-content.svelte +25 -0
- package/dist/ui/alert-dialog/alert-dialog-content.svelte.d.ts +4 -0
- package/dist/ui/alert-dialog/alert-dialog-description.svelte +16 -0
- package/dist/ui/alert-dialog/alert-dialog-description.svelte.d.ts +4 -0
- package/dist/ui/alert-dialog/alert-dialog-overlay.svelte +16 -0
- package/dist/ui/alert-dialog/alert-dialog-overlay.svelte.d.ts +4 -0
- package/dist/ui/alert-dialog/alert-dialog-title.svelte +12 -0
- package/dist/ui/alert-dialog/alert-dialog-title.svelte.d.ts +4 -0
- package/dist/ui/alert-dialog/alert-dialog-trigger.svelte +28 -0
- package/dist/ui/alert-dialog/alert-dialog-trigger.svelte.d.ts +9 -0
- package/dist/ui/alert-dialog/index.d.ts +10 -0
- package/dist/ui/alert-dialog/index.js +10 -0
- package/dist/ui/aspect-ratio/aspect-ratio.svelte +19 -0
- package/dist/ui/aspect-ratio/aspect-ratio.svelte.d.ts +5 -0
- package/dist/ui/aspect-ratio/index.d.ts +1 -0
- package/dist/ui/aspect-ratio/index.js +1 -0
- package/dist/ui/avatar/avatar-fallback.svelte +22 -0
- package/dist/ui/avatar/avatar-fallback.svelte.d.ts +5 -0
- package/dist/ui/avatar/avatar-image.svelte +8 -0
- package/dist/ui/avatar/avatar-image.svelte.d.ts +4 -0
- package/dist/ui/avatar/avatar-root.svelte +22 -0
- package/dist/ui/avatar/avatar-root.svelte.d.ts +5 -0
- package/dist/ui/avatar/index.d.ts +3 -0
- package/dist/ui/avatar/index.js +3 -0
- package/dist/ui/badge/badge.svelte +40 -0
- package/dist/ui/badge/badge.svelte.d.ts +32 -0
- package/dist/ui/badge/index.d.ts +1 -0
- package/dist/ui/badge/index.js +1 -0
- package/dist/ui/bar/bar.svelte +45 -0
- package/dist/ui/bar/bar.svelte.d.ts +30 -0
- package/dist/ui/bar/index.d.ts +1 -0
- package/dist/ui/bar/index.js +1 -0
- package/dist/ui/button/button.svelte +53 -0
- package/dist/ui/button/button.svelte.d.ts +21 -0
- package/dist/ui/button/index.d.ts +12 -0
- package/dist/ui/button/index.js +3 -0
- package/dist/ui/button/variants.d.ts +70 -0
- package/dist/ui/button/variants.js +97 -0
- package/dist/ui/button-group/button-group.svelte +31 -0
- package/dist/ui/button-group/button-group.svelte.d.ts +10 -0
- package/dist/ui/button-group/index.d.ts +1 -0
- package/dist/ui/button-group/index.js +1 -0
- package/dist/ui/calendar/calendar-cell.svelte +8 -0
- package/dist/ui/calendar/calendar-cell.svelte.d.ts +4 -0
- package/dist/ui/calendar/calendar-day.svelte +15 -0
- package/dist/ui/calendar/calendar-day.svelte.d.ts +4 -0
- package/dist/ui/calendar/calendar-grid-body.svelte +7 -0
- package/dist/ui/calendar/calendar-grid-body.svelte.d.ts +4 -0
- package/dist/ui/calendar/calendar-grid-head.svelte +7 -0
- package/dist/ui/calendar/calendar-grid-head.svelte.d.ts +4 -0
- package/dist/ui/calendar/calendar-grid-row.svelte +8 -0
- package/dist/ui/calendar/calendar-grid-row.svelte.d.ts +4 -0
- package/dist/ui/calendar/calendar-grid.svelte +8 -0
- package/dist/ui/calendar/calendar-grid.svelte.d.ts +4 -0
- package/dist/ui/calendar/calendar-head-cell.svelte +15 -0
- package/dist/ui/calendar/calendar-head-cell.svelte.d.ts +4 -0
- package/dist/ui/calendar/calendar-header.svelte +12 -0
- package/dist/ui/calendar/calendar-header.svelte.d.ts +4 -0
- package/dist/ui/calendar/calendar-heading.svelte +8 -0
- package/dist/ui/calendar/calendar-heading.svelte.d.ts +4 -0
- package/dist/ui/calendar/calendar-next-button.svelte +30 -0
- package/dist/ui/calendar/calendar-next-button.svelte.d.ts +9 -0
- package/dist/ui/calendar/calendar-prev-button.svelte +30 -0
- package/dist/ui/calendar/calendar-prev-button.svelte.d.ts +9 -0
- package/dist/ui/calendar/calendar-root.svelte +30 -0
- package/dist/ui/calendar/calendar-root.svelte.d.ts +4 -0
- package/dist/ui/calendar/index.d.ts +12 -0
- package/dist/ui/calendar/index.js +12 -0
- package/dist/ui/card/card.svelte +159 -0
- package/dist/ui/card/card.svelte.d.ts +63 -0
- package/dist/ui/card/index.d.ts +1 -0
- package/dist/ui/card/index.js +1 -0
- package/dist/ui/checkbox/checkbox-group-label.svelte +12 -0
- package/dist/ui/checkbox/checkbox-group-label.svelte.d.ts +4 -0
- package/dist/ui/checkbox/checkbox-group.svelte +18 -0
- package/dist/ui/checkbox/checkbox-group.svelte.d.ts +4 -0
- package/dist/ui/checkbox/checkbox.svelte +33 -0
- package/dist/ui/checkbox/checkbox.svelte.d.ts +4 -0
- package/dist/ui/checkbox/index.d.ts +3 -0
- package/dist/ui/checkbox/index.js +3 -0
- package/dist/ui/chip/chip.svelte +66 -0
- package/dist/ui/chip/chip.svelte.d.ts +26 -0
- package/dist/ui/chip/index.d.ts +1 -0
- package/dist/ui/chip/index.js +1 -0
- package/dist/ui/code-block/code-block.svelte +58 -0
- package/dist/ui/code-block/code-block.svelte.d.ts +11 -0
- package/dist/ui/code-block/index.d.ts +1 -0
- package/dist/ui/code-block/index.js +1 -0
- package/dist/ui/collapsible/collapsible-content.svelte +15 -0
- package/dist/ui/collapsible/collapsible-content.svelte.d.ts +5 -0
- package/dist/ui/collapsible/collapsible-trigger.svelte +22 -0
- package/dist/ui/collapsible/collapsible-trigger.svelte.d.ts +5 -0
- package/dist/ui/collapsible/index.d.ts +4 -0
- package/dist/ui/collapsible/index.js +4 -0
- package/dist/ui/combobox/combobox-content.svelte +25 -0
- package/dist/ui/combobox/combobox-content.svelte.d.ts +5 -0
- package/dist/ui/combobox/combobox-empty.svelte +22 -0
- package/dist/ui/combobox/combobox-empty.svelte.d.ts +8 -0
- package/dist/ui/combobox/combobox-group-heading.svelte +19 -0
- package/dist/ui/combobox/combobox-group-heading.svelte.d.ts +5 -0
- package/dist/ui/combobox/combobox-group.svelte +8 -0
- package/dist/ui/combobox/combobox-group.svelte.d.ts +4 -0
- package/dist/ui/combobox/combobox-input.svelte +15 -0
- package/dist/ui/combobox/combobox-input.svelte.d.ts +4 -0
- package/dist/ui/combobox/combobox-item.svelte +17 -0
- package/dist/ui/combobox/combobox-item.svelte.d.ts +4 -0
- package/dist/ui/combobox/combobox-trigger.svelte +27 -0
- package/dist/ui/combobox/combobox-trigger.svelte.d.ts +5 -0
- package/dist/ui/combobox/index.d.ts +10 -0
- package/dist/ui/combobox/index.js +10 -0
- package/dist/ui/command/command-empty.svelte +15 -0
- package/dist/ui/command/command-empty.svelte.d.ts +4 -0
- package/dist/ui/command/command-group-heading.svelte +16 -0
- package/dist/ui/command/command-group-heading.svelte.d.ts +4 -0
- package/dist/ui/command/command-group-items.svelte +12 -0
- package/dist/ui/command/command-group-items.svelte.d.ts +4 -0
- package/dist/ui/command/command-group.svelte +7 -0
- package/dist/ui/command/command-group.svelte.d.ts +4 -0
- package/dist/ui/command/command-input.svelte +45 -0
- package/dist/ui/command/command-input.svelte.d.ts +10 -0
- package/dist/ui/command/command-item.svelte +15 -0
- package/dist/ui/command/command-item.svelte.d.ts +4 -0
- package/dist/ui/command/command-link-item.svelte +15 -0
- package/dist/ui/command/command-link-item.svelte.d.ts +4 -0
- package/dist/ui/command/command-list.svelte +12 -0
- package/dist/ui/command/command-list.svelte.d.ts +4 -0
- package/dist/ui/command/command-loading.svelte +15 -0
- package/dist/ui/command/command-loading.svelte.d.ts +4 -0
- package/dist/ui/command/command-root.svelte +21 -0
- package/dist/ui/command/command-root.svelte.d.ts +4 -0
- package/dist/ui/command/command-separator.svelte +12 -0
- package/dist/ui/command/command-separator.svelte.d.ts +4 -0
- package/dist/ui/command/command-viewport.svelte +8 -0
- package/dist/ui/command/command-viewport.svelte.d.ts +4 -0
- package/dist/ui/command/index.d.ts +12 -0
- package/dist/ui/command/index.js +12 -0
- package/dist/ui/context-menu/context-menu-checkbox-item.svelte +21 -0
- package/dist/ui/context-menu/context-menu-checkbox-item.svelte.d.ts +4 -0
- package/dist/ui/context-menu/context-menu-content.svelte +27 -0
- package/dist/ui/context-menu/context-menu-content.svelte.d.ts +4 -0
- package/dist/ui/context-menu/context-menu-group-heading.svelte +16 -0
- package/dist/ui/context-menu/context-menu-group-heading.svelte.d.ts +4 -0
- package/dist/ui/context-menu/context-menu-item.svelte +22 -0
- package/dist/ui/context-menu/context-menu-item.svelte.d.ts +5 -0
- package/dist/ui/context-menu/context-menu-radio-item.svelte +19 -0
- package/dist/ui/context-menu/context-menu-radio-item.svelte.d.ts +4 -0
- package/dist/ui/context-menu/context-menu-separator.svelte +16 -0
- package/dist/ui/context-menu/context-menu-separator.svelte.d.ts +4 -0
- package/dist/ui/context-menu/context-menu-sub-content.svelte +26 -0
- package/dist/ui/context-menu/context-menu-sub-content.svelte.d.ts +5 -0
- package/dist/ui/context-menu/context-menu-sub-trigger.svelte +24 -0
- package/dist/ui/context-menu/context-menu-sub-trigger.svelte.d.ts +5 -0
- package/dist/ui/context-menu/context-menu-trigger.svelte +12 -0
- package/dist/ui/context-menu/context-menu-trigger.svelte.d.ts +4 -0
- package/dist/ui/context-menu/index.d.ts +14 -0
- package/dist/ui/context-menu/index.js +14 -0
- package/dist/ui/date-field/date-field-input.svelte +15 -0
- package/dist/ui/date-field/date-field-input.svelte.d.ts +4 -0
- package/dist/ui/date-field/date-field-label.svelte +8 -0
- package/dist/ui/date-field/date-field-label.svelte.d.ts +4 -0
- package/dist/ui/date-field/date-field-root.svelte +11 -0
- package/dist/ui/date-field/date-field-root.svelte.d.ts +3 -0
- package/dist/ui/date-field/date-field-segment.svelte +15 -0
- package/dist/ui/date-field/date-field-segment.svelte.d.ts +4 -0
- package/dist/ui/date-field/index.d.ts +4 -0
- package/dist/ui/date-field/index.js +4 -0
- package/dist/ui/date-picker/date-picker-calendar.svelte +16 -0
- package/dist/ui/date-picker/date-picker-calendar.svelte.d.ts +4 -0
- package/dist/ui/date-picker/date-picker-cell.svelte +8 -0
- package/dist/ui/date-picker/date-picker-cell.svelte.d.ts +4 -0
- package/dist/ui/date-picker/date-picker-content.svelte +25 -0
- package/dist/ui/date-picker/date-picker-content.svelte.d.ts +5 -0
- package/dist/ui/date-picker/date-picker-day.svelte +15 -0
- package/dist/ui/date-picker/date-picker-day.svelte.d.ts +4 -0
- package/dist/ui/date-picker/date-picker-grid-body.svelte +11 -0
- package/dist/ui/date-picker/date-picker-grid-body.svelte.d.ts +4 -0
- package/dist/ui/date-picker/date-picker-grid-head.svelte +11 -0
- package/dist/ui/date-picker/date-picker-grid-head.svelte.d.ts +4 -0
- package/dist/ui/date-picker/date-picker-grid-row.svelte +8 -0
- package/dist/ui/date-picker/date-picker-grid-row.svelte.d.ts +4 -0
- package/dist/ui/date-picker/date-picker-grid.svelte +8 -0
- package/dist/ui/date-picker/date-picker-grid.svelte.d.ts +4 -0
- package/dist/ui/date-picker/date-picker-head-cell.svelte +19 -0
- package/dist/ui/date-picker/date-picker-head-cell.svelte.d.ts +4 -0
- package/dist/ui/date-picker/date-picker-header.svelte +12 -0
- package/dist/ui/date-picker/date-picker-header.svelte.d.ts +4 -0
- package/dist/ui/date-picker/date-picker-heading.svelte +12 -0
- package/dist/ui/date-picker/date-picker-heading.svelte.d.ts +4 -0
- package/dist/ui/date-picker/date-picker-input.svelte +15 -0
- package/dist/ui/date-picker/date-picker-input.svelte.d.ts +4 -0
- package/dist/ui/date-picker/date-picker-label.svelte +8 -0
- package/dist/ui/date-picker/date-picker-label.svelte.d.ts +4 -0
- package/dist/ui/date-picker/date-picker-next-button.svelte +30 -0
- package/dist/ui/date-picker/date-picker-next-button.svelte.d.ts +9 -0
- package/dist/ui/date-picker/date-picker-prev-button.svelte +30 -0
- package/dist/ui/date-picker/date-picker-prev-button.svelte.d.ts +9 -0
- package/dist/ui/date-picker/date-picker-root.svelte +19 -0
- package/dist/ui/date-picker/date-picker-root.svelte.d.ts +3 -0
- package/dist/ui/date-picker/date-picker-segment.svelte +15 -0
- package/dist/ui/date-picker/date-picker-segment.svelte.d.ts +4 -0
- package/dist/ui/date-picker/date-picker-trigger.svelte +27 -0
- package/dist/ui/date-picker/date-picker-trigger.svelte.d.ts +5 -0
- package/dist/ui/date-picker/index.d.ts +18 -0
- package/dist/ui/date-picker/index.js +18 -0
- package/dist/ui/date-range-field/date-range-field-input.svelte +19 -0
- package/dist/ui/date-range-field/date-range-field-input.svelte.d.ts +4 -0
- package/dist/ui/date-range-field/date-range-field-label.svelte +12 -0
- package/dist/ui/date-range-field/date-range-field-label.svelte.d.ts +4 -0
- package/dist/ui/date-range-field/date-range-field-root.svelte +13 -0
- package/dist/ui/date-range-field/date-range-field-root.svelte.d.ts +4 -0
- package/dist/ui/date-range-field/date-range-field-segment.svelte +19 -0
- package/dist/ui/date-range-field/date-range-field-segment.svelte.d.ts +3 -0
- package/dist/ui/date-range-field/index.d.ts +4 -0
- package/dist/ui/date-range-field/index.js +4 -0
- package/dist/ui/date-range-picker/date-range-picker-calendar.svelte +16 -0
- package/dist/ui/date-range-picker/date-range-picker-calendar.svelte.d.ts +4 -0
- package/dist/ui/date-range-picker/date-range-picker-cell.svelte +12 -0
- package/dist/ui/date-range-picker/date-range-picker-cell.svelte.d.ts +4 -0
- package/dist/ui/date-range-picker/date-range-picker-content.svelte +25 -0
- package/dist/ui/date-range-picker/date-range-picker-content.svelte.d.ts +5 -0
- package/dist/ui/date-range-picker/date-range-picker-day.svelte +19 -0
- package/dist/ui/date-range-picker/date-range-picker-day.svelte.d.ts +4 -0
- package/dist/ui/date-range-picker/date-range-picker-grid-body.svelte +12 -0
- package/dist/ui/date-range-picker/date-range-picker-grid-body.svelte.d.ts +4 -0
- package/dist/ui/date-range-picker/date-range-picker-grid-head.svelte +12 -0
- package/dist/ui/date-range-picker/date-range-picker-grid-head.svelte.d.ts +4 -0
- package/dist/ui/date-range-picker/date-range-picker-grid-row.svelte +12 -0
- package/dist/ui/date-range-picker/date-range-picker-grid-row.svelte.d.ts +4 -0
- package/dist/ui/date-range-picker/date-range-picker-grid.svelte +16 -0
- package/dist/ui/date-range-picker/date-range-picker-grid.svelte.d.ts +4 -0
- package/dist/ui/date-range-picker/date-range-picker-head-cell.svelte +19 -0
- package/dist/ui/date-range-picker/date-range-picker-head-cell.svelte.d.ts +4 -0
- package/dist/ui/date-range-picker/date-range-picker-header.svelte +16 -0
- package/dist/ui/date-range-picker/date-range-picker-header.svelte.d.ts +4 -0
- package/dist/ui/date-range-picker/date-range-picker-heading.svelte +16 -0
- package/dist/ui/date-range-picker/date-range-picker-heading.svelte.d.ts +4 -0
- package/dist/ui/date-range-picker/date-range-picker-input.svelte +19 -0
- package/dist/ui/date-range-picker/date-range-picker-input.svelte.d.ts +4 -0
- package/dist/ui/date-range-picker/date-range-picker-label.svelte +12 -0
- package/dist/ui/date-range-picker/date-range-picker-label.svelte.d.ts +4 -0
- package/dist/ui/date-range-picker/date-range-picker-next-button.svelte +30 -0
- package/dist/ui/date-range-picker/date-range-picker-next-button.svelte.d.ts +9 -0
- package/dist/ui/date-range-picker/date-range-picker-prev-button.svelte +30 -0
- package/dist/ui/date-range-picker/date-range-picker-prev-button.svelte.d.ts +9 -0
- package/dist/ui/date-range-picker/date-range-picker-root.svelte +19 -0
- package/dist/ui/date-range-picker/date-range-picker-root.svelte.d.ts +4 -0
- package/dist/ui/date-range-picker/date-range-picker-segment.svelte +19 -0
- package/dist/ui/date-range-picker/date-range-picker-segment.svelte.d.ts +3 -0
- package/dist/ui/date-range-picker/date-range-picker-trigger.svelte +27 -0
- package/dist/ui/date-range-picker/date-range-picker-trigger.svelte.d.ts +5 -0
- package/dist/ui/date-range-picker/index.d.ts +18 -0
- package/dist/ui/date-range-picker/index.js +18 -0
- package/dist/ui/dialog/dialog-close.svelte +39 -0
- package/dist/ui/dialog/dialog-close.svelte.d.ts +9 -0
- package/dist/ui/dialog/dialog-content.svelte +25 -0
- package/dist/ui/dialog/dialog-content.svelte.d.ts +5 -0
- package/dist/ui/dialog/dialog-description.svelte +12 -0
- package/dist/ui/dialog/dialog-description.svelte.d.ts +4 -0
- package/dist/ui/dialog/dialog-overlay.svelte +12 -0
- package/dist/ui/dialog/dialog-overlay.svelte.d.ts +4 -0
- package/dist/ui/dialog/dialog-title.svelte +8 -0
- package/dist/ui/dialog/dialog-title.svelte.d.ts +4 -0
- package/dist/ui/dialog/dialog-trigger.svelte +28 -0
- package/dist/ui/dialog/dialog-trigger.svelte.d.ts +9 -0
- package/dist/ui/dialog/index.d.ts +9 -0
- package/dist/ui/dialog/index.js +9 -0
- package/dist/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +21 -0
- package/dist/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +4 -0
- package/dist/ui/dropdown-menu/dropdown-menu-content.svelte +27 -0
- package/dist/ui/dropdown-menu/dropdown-menu-content.svelte.d.ts +5 -0
- package/dist/ui/dropdown-menu/dropdown-menu-group-heading.svelte +16 -0
- package/dist/ui/dropdown-menu/dropdown-menu-group-heading.svelte.d.ts +4 -0
- package/dist/ui/dropdown-menu/dropdown-menu-item.svelte +22 -0
- package/dist/ui/dropdown-menu/dropdown-menu-item.svelte.d.ts +5 -0
- package/dist/ui/dropdown-menu/dropdown-menu-radio-item.svelte +19 -0
- package/dist/ui/dropdown-menu/dropdown-menu-radio-item.svelte.d.ts +4 -0
- package/dist/ui/dropdown-menu/dropdown-menu-separator.svelte +16 -0
- package/dist/ui/dropdown-menu/dropdown-menu-separator.svelte.d.ts +4 -0
- package/dist/ui/dropdown-menu/dropdown-menu-sub-content.svelte +26 -0
- package/dist/ui/dropdown-menu/dropdown-menu-sub-content.svelte.d.ts +5 -0
- package/dist/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +24 -0
- package/dist/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte.d.ts +5 -0
- package/dist/ui/dropdown-menu/dropdown-menu-trigger.svelte +24 -0
- package/dist/ui/dropdown-menu/dropdown-menu-trigger.svelte.d.ts +5 -0
- package/dist/ui/dropdown-menu/index.d.ts +14 -0
- package/dist/ui/dropdown-menu/index.js +14 -0
- package/dist/ui/file-upload/file-upload.svelte +98 -0
- package/dist/ui/file-upload/file-upload.svelte.d.ts +8 -0
- package/dist/ui/file-upload/index.d.ts +1 -0
- package/dist/ui/file-upload/index.js +1 -0
- package/dist/ui/index.d.ts +58 -0
- package/dist/ui/index.js +62 -0
- package/dist/ui/input/index.d.ts +2 -0
- package/dist/ui/input/index.js +2 -0
- package/dist/ui/input/input.svelte +23 -0
- package/dist/ui/input/input.svelte.d.ts +7 -0
- package/dist/ui/input/textarea.svelte +23 -0
- package/dist/ui/input/textarea.svelte.d.ts +7 -0
- package/dist/ui/kv/index.d.ts +1 -0
- package/dist/ui/kv/index.js +1 -0
- package/dist/ui/kv/kv.svelte +33 -0
- package/dist/ui/kv/kv.svelte.d.ts +10 -0
- package/dist/ui/label/index.d.ts +1 -0
- package/dist/ui/label/index.js +1 -0
- package/dist/ui/label/label.svelte +15 -0
- package/dist/ui/label/label.svelte.d.ts +5 -0
- package/dist/ui/link-preview/index.d.ts +7 -0
- package/dist/ui/link-preview/index.js +7 -0
- package/dist/ui/link-preview/link-preview-content.svelte +26 -0
- package/dist/ui/link-preview/link-preview-content.svelte.d.ts +5 -0
- package/dist/ui/link-preview/link-preview-trigger.svelte +19 -0
- package/dist/ui/link-preview/link-preview-trigger.svelte.d.ts +5 -0
- package/dist/ui/menu/index.d.ts +1 -0
- package/dist/ui/menu/index.js +3 -0
- package/dist/ui/menubar/index.d.ts +16 -0
- package/dist/ui/menubar/index.js +16 -0
- package/dist/ui/menubar/menubar-checkbox-item.svelte +21 -0
- package/dist/ui/menubar/menubar-checkbox-item.svelte.d.ts +4 -0
- package/dist/ui/menubar/menubar-content.svelte +27 -0
- package/dist/ui/menubar/menubar-content.svelte.d.ts +5 -0
- package/dist/ui/menubar/menubar-group-heading.svelte +16 -0
- package/dist/ui/menubar/menubar-group-heading.svelte.d.ts +4 -0
- package/dist/ui/menubar/menubar-item.svelte +22 -0
- package/dist/ui/menubar/menubar-item.svelte.d.ts +5 -0
- package/dist/ui/menubar/menubar-radio-item.svelte +15 -0
- package/dist/ui/menubar/menubar-radio-item.svelte.d.ts +4 -0
- package/dist/ui/menubar/menubar-root.svelte +15 -0
- package/dist/ui/menubar/menubar-root.svelte.d.ts +4 -0
- package/dist/ui/menubar/menubar-separator.svelte +12 -0
- package/dist/ui/menubar/menubar-separator.svelte.d.ts +4 -0
- package/dist/ui/menubar/menubar-sub-content.svelte +26 -0
- package/dist/ui/menubar/menubar-sub-content.svelte.d.ts +5 -0
- package/dist/ui/menubar/menubar-sub-trigger.svelte +24 -0
- package/dist/ui/menubar/menubar-sub-trigger.svelte.d.ts +5 -0
- package/dist/ui/menubar/menubar-trigger.svelte +22 -0
- package/dist/ui/menubar/menubar-trigger.svelte.d.ts +5 -0
- package/dist/ui/meter/index.d.ts +1 -0
- package/dist/ui/meter/index.js +1 -0
- package/dist/ui/meter/meter.svelte +32 -0
- package/dist/ui/meter/meter.svelte.d.ts +4 -0
- package/dist/ui/mode/index.d.ts +1 -0
- package/dist/ui/mode/index.js +1 -0
- package/dist/ui/mode/mode.svelte +61 -0
- package/dist/ui/mode/mode.svelte.d.ts +18 -0
- package/dist/ui/navigation-menu/index.d.ts +10 -0
- package/dist/ui/navigation-menu/index.js +10 -0
- package/dist/ui/pagination/index.d.ts +4 -0
- package/dist/ui/pagination/index.js +4 -0
- package/dist/ui/pagination/pagination-next-button.svelte +30 -0
- package/dist/ui/pagination/pagination-next-button.svelte.d.ts +9 -0
- package/dist/ui/pagination/pagination-page.svelte +32 -0
- package/dist/ui/pagination/pagination-page.svelte.d.ts +9 -0
- package/dist/ui/pagination/pagination-prev-button.svelte +30 -0
- package/dist/ui/pagination/pagination-prev-button.svelte.d.ts +9 -0
- package/dist/ui/pagination/pagination-root.svelte +18 -0
- package/dist/ui/pagination/pagination-root.svelte.d.ts +4 -0
- package/dist/ui/pane/index.d.ts +1 -0
- package/dist/ui/pane/index.js +1 -0
- package/dist/ui/pane/pane.svelte +145 -0
- package/dist/ui/pane/pane.svelte.d.ts +34 -0
- package/dist/ui/pin-input/index.d.ts +2 -0
- package/dist/ui/pin-input/index.js +2 -0
- package/dist/ui/pin-input/pin-input-cell.svelte +30 -0
- package/dist/ui/pin-input/pin-input-cell.svelte.d.ts +4 -0
- package/dist/ui/pin-input/pin-input-root.svelte +18 -0
- package/dist/ui/pin-input/pin-input-root.svelte.d.ts +4 -0
- package/dist/ui/popover/index.d.ts +7 -0
- package/dist/ui/popover/index.js +7 -0
- package/dist/ui/popover/popover-close.svelte +27 -0
- package/dist/ui/popover/popover-close.svelte.d.ts +9 -0
- package/dist/ui/popover/popover-content.svelte +24 -0
- package/dist/ui/popover/popover-content.svelte.d.ts +5 -0
- package/dist/ui/popover/popover-trigger.svelte +41 -0
- package/dist/ui/popover/popover-trigger.svelte.d.ts +9 -0
- package/dist/ui/progress/index.d.ts +1 -0
- package/dist/ui/progress/index.js +1 -0
- package/dist/ui/progress/progress.svelte +47 -0
- package/dist/ui/progress/progress.svelte.d.ts +4 -0
- package/dist/ui/provider/axes.d.ts +74 -0
- package/dist/ui/provider/axes.js +70 -0
- package/dist/ui/provider/index.d.ts +6 -0
- package/dist/ui/provider/index.js +6 -0
- package/dist/ui/provider/modes.d.ts +12 -0
- package/dist/ui/provider/modes.js +14 -0
- package/dist/ui/provider/surfaces.d.ts +45 -0
- package/dist/ui/provider/surfaces.js +24 -0
- package/dist/ui/radio-group/index.d.ts +2 -0
- package/dist/ui/radio-group/index.js +2 -0
- package/dist/ui/radio-group/radio-group-item.svelte +19 -0
- package/dist/ui/radio-group/radio-group-item.svelte.d.ts +4 -0
- package/dist/ui/radio-group/radio-group-root.svelte +18 -0
- package/dist/ui/radio-group/radio-group-root.svelte.d.ts +4 -0
- package/dist/ui/range-calendar/index.d.ts +15 -0
- package/dist/ui/range-calendar/index.js +15 -0
- package/dist/ui/rating-group/index.d.ts +2 -0
- package/dist/ui/rating-group/index.js +2 -0
- package/dist/ui/rating-group/rating-group-item.svelte +17 -0
- package/dist/ui/rating-group/rating-group-item.svelte.d.ts +4 -0
- package/dist/ui/rating-group/rating-group-root.svelte +20 -0
- package/dist/ui/rating-group/rating-group-root.svelte.d.ts +4 -0
- package/dist/ui/scroll-area/index.d.ts +5 -0
- package/dist/ui/scroll-area/index.js +5 -0
- package/dist/ui/scroll-area/scroll-area-corner.svelte +7 -0
- package/dist/ui/scroll-area/scroll-area-corner.svelte.d.ts +4 -0
- package/dist/ui/scroll-area/scroll-area-scrollbar.svelte +19 -0
- package/dist/ui/scroll-area/scroll-area-scrollbar.svelte.d.ts +4 -0
- package/dist/ui/scroll-area/scroll-area-thumb.svelte +12 -0
- package/dist/ui/scroll-area/scroll-area-thumb.svelte.d.ts +4 -0
- package/dist/ui/scroll-area/scroll-area-viewport.svelte +12 -0
- package/dist/ui/scroll-area/scroll-area-viewport.svelte.d.ts +4 -0
- package/dist/ui/scroll-area/scroll-area.svelte +18 -0
- package/dist/ui/scroll-area/scroll-area.svelte.d.ts +4 -0
- package/dist/ui/select/index.d.ts +6 -0
- package/dist/ui/select/index.js +6 -0
- package/dist/ui/select/select-content.svelte +25 -0
- package/dist/ui/select/select-content.svelte.d.ts +5 -0
- package/dist/ui/select/select-item.svelte +17 -0
- package/dist/ui/select/select-item.svelte.d.ts +4 -0
- package/dist/ui/select/select-trigger.svelte +24 -0
- package/dist/ui/select/select-trigger.svelte.d.ts +5 -0
- package/dist/ui/select/select-value.svelte +71 -0
- package/dist/ui/select/select-value.svelte.d.ts +9 -0
- package/dist/ui/separator/index.d.ts +1 -0
- package/dist/ui/separator/index.js +1 -0
- package/dist/ui/separator/separator.svelte +31 -0
- package/dist/ui/separator/separator.svelte.d.ts +8 -0
- package/dist/ui/sheet/index.d.ts +2 -0
- package/dist/ui/sheet/index.js +5 -0
- package/dist/ui/sheet/sheet-content.svelte +41 -0
- package/dist/ui/sheet/sheet-content.svelte.d.ts +31 -0
- package/dist/ui/skeleton/index.d.ts +1 -0
- package/dist/ui/skeleton/index.js +1 -0
- package/dist/ui/skeleton/skeleton.svelte +43 -0
- package/dist/ui/skeleton/skeleton.svelte.d.ts +27 -0
- package/dist/ui/slider/index.d.ts +6 -0
- package/dist/ui/slider/index.js +6 -0
- package/dist/ui/slider/slider-range.svelte +40 -0
- package/dist/ui/slider/slider-range.svelte.d.ts +13 -0
- package/dist/ui/slider/slider-root.svelte +29 -0
- package/dist/ui/slider/slider-root.svelte.d.ts +4 -0
- package/dist/ui/slider/slider-thumb-label.svelte +12 -0
- package/dist/ui/slider/slider-thumb-label.svelte.d.ts +4 -0
- package/dist/ui/slider/slider-thumb.svelte +15 -0
- package/dist/ui/slider/slider-thumb.svelte.d.ts +4 -0
- package/dist/ui/slider/slider-tick-label.svelte +12 -0
- package/dist/ui/slider/slider-tick-label.svelte.d.ts +4 -0
- package/dist/ui/slider/slider-tick.svelte +15 -0
- package/dist/ui/slider/slider-tick.svelte.d.ts +4 -0
- package/dist/ui/switch/index.d.ts +1 -0
- package/dist/ui/switch/index.js +1 -0
- package/dist/ui/switch/switch.svelte +36 -0
- package/dist/ui/switch/switch.svelte.d.ts +4 -0
- package/dist/ui/table/index.d.ts +6 -0
- package/dist/ui/table/index.js +6 -0
- package/dist/ui/table/table-body.svelte +18 -0
- package/dist/ui/table/table-body.svelte.d.ts +9 -0
- package/dist/ui/table/table-cell.svelte +26 -0
- package/dist/ui/table/table-cell.svelte.d.ts +9 -0
- package/dist/ui/table/table-head-cell.svelte +26 -0
- package/dist/ui/table/table-head-cell.svelte.d.ts +9 -0
- package/dist/ui/table/table-head.svelte +18 -0
- package/dist/ui/table/table-head.svelte.d.ts +9 -0
- package/dist/ui/table/table-root.svelte +36 -0
- package/dist/ui/table/table-root.svelte.d.ts +17 -0
- package/dist/ui/table/table-row.svelte +26 -0
- package/dist/ui/table/table-row.svelte.d.ts +9 -0
- package/dist/ui/tabs/index.d.ts +4 -0
- package/dist/ui/tabs/index.js +4 -0
- package/dist/ui/tabs/tabs-content.svelte +7 -0
- package/dist/ui/tabs/tabs-content.svelte.d.ts +4 -0
- package/dist/ui/tabs/tabs-list.svelte +7 -0
- package/dist/ui/tabs/tabs-list.svelte.d.ts +4 -0
- package/dist/ui/tabs/tabs-trigger.svelte +7 -0
- package/dist/ui/tabs/tabs-trigger.svelte.d.ts +4 -0
- package/dist/ui/tabs/tabs.svelte +7 -0
- package/dist/ui/tabs/tabs.svelte.d.ts +4 -0
- package/dist/ui/time-field/index.d.ts +4 -0
- package/dist/ui/time-field/index.js +4 -0
- package/dist/ui/time-field/time-field-input.svelte +15 -0
- package/dist/ui/time-field/time-field-input.svelte.d.ts +4 -0
- package/dist/ui/time-field/time-field-label.svelte +8 -0
- package/dist/ui/time-field/time-field-label.svelte.d.ts +4 -0
- package/dist/ui/time-field/time-field-root.svelte +11 -0
- package/dist/ui/time-field/time-field-root.svelte.d.ts +4 -0
- package/dist/ui/time-field/time-field-segment.svelte +15 -0
- package/dist/ui/time-field/time-field-segment.svelte.d.ts +4 -0
- package/dist/ui/time-range-field/index.d.ts +4 -0
- package/dist/ui/time-range-field/index.js +4 -0
- package/dist/ui/time-range-field/time-range-field-input.svelte +19 -0
- package/dist/ui/time-range-field/time-range-field-input.svelte.d.ts +4 -0
- package/dist/ui/time-range-field/time-range-field-label.svelte +12 -0
- package/dist/ui/time-range-field/time-range-field-label.svelte.d.ts +4 -0
- package/dist/ui/time-range-field/time-range-field-root.svelte +13 -0
- package/dist/ui/time-range-field/time-range-field-root.svelte.d.ts +4 -0
- package/dist/ui/time-range-field/time-range-field-segment.svelte +19 -0
- package/dist/ui/time-range-field/time-range-field-segment.svelte.d.ts +3 -0
- package/dist/ui/toggle/index.d.ts +1 -0
- package/dist/ui/toggle/index.js +1 -0
- package/dist/ui/toggle/toggle.svelte +27 -0
- package/dist/ui/toggle/toggle.svelte.d.ts +9 -0
- package/dist/ui/toggle-group/index.d.ts +2 -0
- package/dist/ui/toggle-group/index.js +2 -0
- package/dist/ui/toggle-group/toggle-group-item.svelte +17 -0
- package/dist/ui/toggle-group/toggle-group-item.svelte.d.ts +4 -0
- package/dist/ui/toggle-group/toggle-group-root.svelte +19 -0
- package/dist/ui/toggle-group/toggle-group-root.svelte.d.ts +5 -0
- package/dist/ui/toolbar/index.d.ts +6 -0
- package/dist/ui/toolbar/index.js +6 -0
- package/dist/ui/tooltip/index.d.ts +7 -0
- package/dist/ui/tooltip/index.js +7 -0
- package/dist/ui/tooltip/tooltip-content.svelte +26 -0
- package/dist/ui/tooltip/tooltip-content.svelte.d.ts +5 -0
- package/dist/ui/tooltip/tooltip-trigger.svelte +7 -0
- package/dist/ui/tooltip/tooltip-trigger.svelte.d.ts +4 -0
- package/dist/ui/video-player/index.d.ts +1 -0
- package/dist/ui/video-player/index.js +1 -0
- package/dist/ui/video-player/video-player.svelte +1377 -0
- package/dist/ui/video-player/video-player.svelte.d.ts +107 -0
- package/dist/utils/index.d.ts +15 -0
- package/dist/utils/index.js +24 -0
- package/package.json +115 -0
- package/readme +127 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Sub-pixel tolerance. Below this, treat values as equal. */
|
|
2
|
+
export declare const TOL = 0.5;
|
|
3
|
+
export declare function flexChildren(el: HTMLElement): HTMLElement[];
|
|
4
|
+
export declare function isFlex(style: CSSStyleDeclaration): boolean;
|
|
5
|
+
export declare function isHorizontalFlex(style: CSSStyleDeclaration): boolean;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Sub-pixel tolerance. Below this, treat values as equal. */
|
|
2
|
+
export const TOL = 0.5;
|
|
3
|
+
export function flexChildren(el) {
|
|
4
|
+
return [...el.children].filter((c) => c instanceof HTMLElement);
|
|
5
|
+
}
|
|
6
|
+
export function isFlex(style) {
|
|
7
|
+
return style.display === 'flex' || style.display === 'inline-flex';
|
|
8
|
+
}
|
|
9
|
+
export function isHorizontalFlex(style) {
|
|
10
|
+
return isFlex(style) && !style.flexDirection.startsWith('column');
|
|
11
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { TOL, flexChildren, isFlex } from './_helpers.js';
|
|
2
|
+
export const concentricInset = {
|
|
3
|
+
id: 'layout/concentric-inset',
|
|
4
|
+
name: 'Concentric vertical inset',
|
|
5
|
+
description: 'In a vertically-centered flex container, each child should sit with equal space above and below. Flags asymmetry greater than 0.5px.',
|
|
6
|
+
category: 'layout',
|
|
7
|
+
severity: 'warn',
|
|
8
|
+
selector: '*',
|
|
9
|
+
check(el) {
|
|
10
|
+
const s = getComputedStyle(el);
|
|
11
|
+
if (!isFlex(s) || !s.alignItems.includes('center'))
|
|
12
|
+
return null;
|
|
13
|
+
const kids = flexChildren(el);
|
|
14
|
+
if (kids.length === 0)
|
|
15
|
+
return null;
|
|
16
|
+
const pR = el.getBoundingClientRect();
|
|
17
|
+
const issues = [];
|
|
18
|
+
for (const k of kids) {
|
|
19
|
+
const kR = k.getBoundingClientRect();
|
|
20
|
+
const top = kR.top - pR.top;
|
|
21
|
+
const bot = pR.bottom - kR.bottom;
|
|
22
|
+
if (Math.abs(top - bot) > TOL) {
|
|
23
|
+
issues.push({
|
|
24
|
+
auditId: 'layout/concentric-inset',
|
|
25
|
+
element: k,
|
|
26
|
+
message: `asymmetric vertical inset: T${top.toFixed(1)} vs B${bot.toFixed(1)}`,
|
|
27
|
+
details: { top, bottom: bot, delta: top - bot }
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return issues.length > 0 ? issues : null;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { registry } from '../registry.js';
|
|
2
|
+
import { concentricInset } from './concentric-inset.js';
|
|
3
|
+
import { uniformSiblingGaps } from './uniform-sibling-gaps.js';
|
|
4
|
+
import { wallMatchesGap } from './wall-matches-gap.js';
|
|
5
|
+
export { concentricInset, uniformSiblingGaps, wallMatchesGap };
|
|
6
|
+
// Auto-register built-ins. Consumers can still unregister or add their own.
|
|
7
|
+
registry.register(concentricInset);
|
|
8
|
+
registry.register(uniformSiblingGaps);
|
|
9
|
+
registry.register(wallMatchesGap);
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { TOL, flexChildren, isHorizontalFlex } from './_helpers.js';
|
|
2
|
+
export const uniformSiblingGaps = {
|
|
3
|
+
id: 'layout/uniform-sibling-gaps',
|
|
4
|
+
name: 'Uniform sibling gaps',
|
|
5
|
+
description: 'Horizontal flex siblings should have equal gaps between each adjacent pair. Flags variance greater than 0.5px.',
|
|
6
|
+
category: 'layout',
|
|
7
|
+
severity: 'warn',
|
|
8
|
+
selector: '*',
|
|
9
|
+
check(el) {
|
|
10
|
+
const s = getComputedStyle(el);
|
|
11
|
+
if (!isHorizontalFlex(s))
|
|
12
|
+
return null;
|
|
13
|
+
const kids = flexChildren(el);
|
|
14
|
+
if (kids.length < 3)
|
|
15
|
+
return null;
|
|
16
|
+
const rects = kids.map((k) => k.getBoundingClientRect());
|
|
17
|
+
const gaps = rects.slice(1).map((r, i) => r.left - rects[i].right);
|
|
18
|
+
const min = Math.min(...gaps);
|
|
19
|
+
const max = Math.max(...gaps);
|
|
20
|
+
if (max - min <= TOL)
|
|
21
|
+
return null;
|
|
22
|
+
return {
|
|
23
|
+
auditId: 'layout/uniform-sibling-gaps',
|
|
24
|
+
element: el,
|
|
25
|
+
message: `sibling gaps vary: ${min.toFixed(1)}…${max.toFixed(1)} (Δ ${(max - min).toFixed(1)})`,
|
|
26
|
+
details: { gaps, min, max }
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { TOL, flexChildren, isHorizontalFlex } from './_helpers.js';
|
|
2
|
+
export const wallMatchesGap = {
|
|
3
|
+
id: 'layout/wall-matches-gap',
|
|
4
|
+
name: 'Wall padding matches sibling gap',
|
|
5
|
+
description: 'In a horizontal flex container, the left padding (wall to first child) should equal the gap between siblings — the rhythm rule that would have caught the bar/button-group mismatch. Flags delta greater than 0.5px.',
|
|
6
|
+
category: 'layout',
|
|
7
|
+
severity: 'info',
|
|
8
|
+
selector: '*',
|
|
9
|
+
check(el) {
|
|
10
|
+
const s = getComputedStyle(el);
|
|
11
|
+
if (!isHorizontalFlex(s))
|
|
12
|
+
return null;
|
|
13
|
+
const kids = flexChildren(el);
|
|
14
|
+
if (kids.length < 2)
|
|
15
|
+
return null;
|
|
16
|
+
const pR = el.getBoundingClientRect();
|
|
17
|
+
const first = kids[0].getBoundingClientRect();
|
|
18
|
+
const second = kids[1].getBoundingClientRect();
|
|
19
|
+
const wall = first.left - pR.left;
|
|
20
|
+
const gap = second.left - first.right;
|
|
21
|
+
if (Math.abs(wall - gap) <= TOL)
|
|
22
|
+
return null;
|
|
23
|
+
return {
|
|
24
|
+
auditId: 'layout/wall-matches-gap',
|
|
25
|
+
element: el,
|
|
26
|
+
message: `wall ≠ gap: wall=${wall.toFixed(1)} gap=${gap.toFixed(1)}`,
|
|
27
|
+
details: { wall, gap, delta: wall - gap }
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Audit } from './types.js';
|
|
2
|
+
export declare class AuditRegistry {
|
|
3
|
+
#private;
|
|
4
|
+
constructor();
|
|
5
|
+
register(audit: Audit): void;
|
|
6
|
+
unregister(id: string): void;
|
|
7
|
+
all(): Audit[];
|
|
8
|
+
get(id: string): Audit | undefined;
|
|
9
|
+
isEnabled(id: string): boolean;
|
|
10
|
+
setEnabled(id: string, enabled: boolean): void;
|
|
11
|
+
}
|
|
12
|
+
/** Shared singleton. Import built-in audits via ./audits to auto-register. */
|
|
13
|
+
export declare const registry: AuditRegistry;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const STORAGE_KEY = 'era-audit-disabled';
|
|
2
|
+
export class AuditRegistry {
|
|
3
|
+
#audits = new Map();
|
|
4
|
+
#disabled;
|
|
5
|
+
constructor() {
|
|
6
|
+
this.#disabled = new Set(loadDisabled());
|
|
7
|
+
}
|
|
8
|
+
register(audit) {
|
|
9
|
+
if (this.#audits.has(audit.id)) {
|
|
10
|
+
console.warn(`[audit] duplicate id: ${audit.id}`);
|
|
11
|
+
}
|
|
12
|
+
this.#audits.set(audit.id, audit);
|
|
13
|
+
}
|
|
14
|
+
unregister(id) {
|
|
15
|
+
this.#audits.delete(id);
|
|
16
|
+
}
|
|
17
|
+
all() {
|
|
18
|
+
return [...this.#audits.values()];
|
|
19
|
+
}
|
|
20
|
+
get(id) {
|
|
21
|
+
return this.#audits.get(id);
|
|
22
|
+
}
|
|
23
|
+
isEnabled(id) {
|
|
24
|
+
return !this.#disabled.has(id);
|
|
25
|
+
}
|
|
26
|
+
setEnabled(id, enabled) {
|
|
27
|
+
if (enabled)
|
|
28
|
+
this.#disabled.delete(id);
|
|
29
|
+
else
|
|
30
|
+
this.#disabled.add(id);
|
|
31
|
+
saveDisabled(this.#disabled);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function loadDisabled() {
|
|
35
|
+
if (typeof localStorage === 'undefined')
|
|
36
|
+
return [];
|
|
37
|
+
try {
|
|
38
|
+
return JSON.parse(localStorage.getItem(STORAGE_KEY) ?? '[]');
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return [];
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function saveDisabled(disabled) {
|
|
45
|
+
if (typeof localStorage === 'undefined')
|
|
46
|
+
return;
|
|
47
|
+
localStorage.setItem(STORAGE_KEY, JSON.stringify([...disabled]));
|
|
48
|
+
}
|
|
49
|
+
/** Shared singleton. Import built-in audits via ./audits to auto-register. */
|
|
50
|
+
export const registry = new AuditRegistry();
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export function runAudits(root, reg) {
|
|
2
|
+
return reg
|
|
3
|
+
.all()
|
|
4
|
+
.filter((a) => reg.isEnabled(a.id))
|
|
5
|
+
.map((audit) => {
|
|
6
|
+
const t0 = performance.now();
|
|
7
|
+
const issues = runOne(audit, root);
|
|
8
|
+
return { audit, issues, durationMs: performance.now() - t0 };
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
function runOne(audit, root) {
|
|
12
|
+
if (audit.runAll)
|
|
13
|
+
return audit.runAll(root);
|
|
14
|
+
if (!audit.selector || !audit.check)
|
|
15
|
+
return [];
|
|
16
|
+
const issues = [];
|
|
17
|
+
for (const el of root.querySelectorAll(audit.selector)) {
|
|
18
|
+
const r = audit.check(el);
|
|
19
|
+
if (!r)
|
|
20
|
+
continue;
|
|
21
|
+
if (Array.isArray(r))
|
|
22
|
+
issues.push(...r);
|
|
23
|
+
else
|
|
24
|
+
issues.push(r);
|
|
25
|
+
}
|
|
26
|
+
return issues;
|
|
27
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type AuditSeverity = 'info' | 'warn' | 'error';
|
|
2
|
+
export type AuditCategory = 'layout' | 'tokens' | 'a11y' | 'semantics';
|
|
3
|
+
export interface Issue {
|
|
4
|
+
readonly auditId: string;
|
|
5
|
+
readonly element: HTMLElement;
|
|
6
|
+
readonly message: string;
|
|
7
|
+
readonly details?: Record<string, unknown>;
|
|
8
|
+
}
|
|
9
|
+
type CheckResult = Issue | Issue[] | null;
|
|
10
|
+
export interface Audit {
|
|
11
|
+
readonly id: string;
|
|
12
|
+
readonly name: string;
|
|
13
|
+
readonly description: string;
|
|
14
|
+
readonly category: AuditCategory;
|
|
15
|
+
readonly severity: AuditSeverity;
|
|
16
|
+
/** CSS selector for elements the runner iterates. Paired with check(). */
|
|
17
|
+
readonly selector?: string;
|
|
18
|
+
/** Per-element check. Return null to pass, Issue(s) to report. */
|
|
19
|
+
readonly check?: (el: HTMLElement) => CheckResult;
|
|
20
|
+
/** Escape hatch for audits that don't fit selector iteration. */
|
|
21
|
+
readonly runAll?: (root: HTMLElement) => Issue[];
|
|
22
|
+
}
|
|
23
|
+
export interface AuditResult {
|
|
24
|
+
readonly audit: Audit;
|
|
25
|
+
readonly issues: Issue[];
|
|
26
|
+
readonly durationMs: number;
|
|
27
|
+
}
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { onMount } from 'svelte';
|
|
3
|
+
import { dev } from '$app/environment';
|
|
4
|
+
import { registry, runAudits, type AuditResult } from './audit/index.js';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
/** Scope audits to a subtree. Defaults to document.body. */
|
|
8
|
+
root?: HTMLElement;
|
|
9
|
+
/** Shortcut letter (cmd/ctrl + shift + key). Default: "a". */
|
|
10
|
+
key?: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
let { root, key = 'a' }: Props = $props();
|
|
14
|
+
|
|
15
|
+
let open = $state(false);
|
|
16
|
+
let results = $state<AuditResult[]>([]);
|
|
17
|
+
|
|
18
|
+
// Highlight tracking — restore previous outline when a new element is selected.
|
|
19
|
+
let highlightedEl: HTMLElement | undefined;
|
|
20
|
+
let prevOutline = '';
|
|
21
|
+
|
|
22
|
+
function run() {
|
|
23
|
+
results = runAudits(root ?? document.body, registry);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function toggle(id: string, enabled: boolean) {
|
|
27
|
+
registry.setEnabled(id, enabled);
|
|
28
|
+
run();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function highlight(el: HTMLElement) {
|
|
32
|
+
if (highlightedEl) highlightedEl.style.outline = prevOutline;
|
|
33
|
+
prevOutline = el.style.outline;
|
|
34
|
+
el.style.outline = '2px solid oklch(0.7 0.3 330)';
|
|
35
|
+
el.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
|
36
|
+
highlightedEl = el;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function onKey(e: KeyboardEvent) {
|
|
40
|
+
if ((e.metaKey || e.ctrlKey) && e.shiftKey && e.key.toLowerCase() === key) {
|
|
41
|
+
e.preventDefault();
|
|
42
|
+
open = !open;
|
|
43
|
+
if (open) run();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
onMount(() => {
|
|
48
|
+
window.addEventListener('keydown', onKey);
|
|
49
|
+
return () => {
|
|
50
|
+
window.removeEventListener('keydown', onKey);
|
|
51
|
+
if (highlightedEl) highlightedEl.style.outline = prevOutline;
|
|
52
|
+
};
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
let totalIssues = $derived(results.reduce((n, r) => n + r.issues.length, 0));
|
|
56
|
+
|
|
57
|
+
const isMac = typeof navigator !== 'undefined' && navigator.platform.includes('Mac');
|
|
58
|
+
</script>
|
|
59
|
+
|
|
60
|
+
{#if dev && open}
|
|
61
|
+
<div
|
|
62
|
+
class="fixed right-4 bottom-4 z-50 flex max-h-[70vh] w-96 flex-col overflow-hidden rounded-(--era-rd-md) bg-surface font-mono text-body shadow-[inset_0_0_0_0.5px_var(--color-border),var(--era-shadow)]"
|
|
63
|
+
>
|
|
64
|
+
<header
|
|
65
|
+
class="flex items-center gap-(--era-xs-inset-sm) px-(--era-inset-sm) py-(--era-gap) shadow-[inset_0_-0.5px_0_0_var(--color-border)]"
|
|
66
|
+
>
|
|
67
|
+
<strong class="text-bright">audits</strong>
|
|
68
|
+
<span class="text-muted">
|
|
69
|
+
{totalIssues} issue{totalIssues === 1 ? '' : 's'}
|
|
70
|
+
</span>
|
|
71
|
+
<button class="ml-auto text-muted hover:text-bright" onclick={run} aria-label="Re-run audits"
|
|
72
|
+
>↻</button
|
|
73
|
+
>
|
|
74
|
+
<button class="text-muted hover:text-bright" onclick={() => (open = false)} aria-label="Close"
|
|
75
|
+
>×</button
|
|
76
|
+
>
|
|
77
|
+
</header>
|
|
78
|
+
|
|
79
|
+
<div class="overflow-auto">
|
|
80
|
+
{#each results as r (r.audit.id)}
|
|
81
|
+
{@const enabled = registry.isEnabled(r.audit.id)}
|
|
82
|
+
<details open={r.issues.length > 0}>
|
|
83
|
+
<summary
|
|
84
|
+
class="flex cursor-pointer items-center gap-(--era-xs-inset-sm) px-(--era-inset-sm) py-(--era-gap) hover:bg-(--era-highlight)"
|
|
85
|
+
>
|
|
86
|
+
<input
|
|
87
|
+
type="checkbox"
|
|
88
|
+
checked={enabled}
|
|
89
|
+
onclick={(e) => e.stopPropagation()}
|
|
90
|
+
onchange={(e) => toggle(r.audit.id, e.currentTarget.checked)}
|
|
91
|
+
/>
|
|
92
|
+
<span class="flex-1 text-fg">{r.audit.name}</span>
|
|
93
|
+
<span class={r.issues.length > 0 ? 'text-destructive' : 'text-muted'}>
|
|
94
|
+
{r.issues.length}
|
|
95
|
+
</span>
|
|
96
|
+
</summary>
|
|
97
|
+
{#if r.issues.length === 0}
|
|
98
|
+
<p class="px-(--era-inset-sm) py-(--era-gap) text-muted">
|
|
99
|
+
{r.audit.description}
|
|
100
|
+
</p>
|
|
101
|
+
{:else}
|
|
102
|
+
{#each r.issues as issue, i (i)}
|
|
103
|
+
<button
|
|
104
|
+
class="flex w-full items-start gap-(--era-xs-inset-sm) px-(--era-inset-sm) py-(--era-gap) text-left hover:bg-(--era-highlight)"
|
|
105
|
+
onclick={() => highlight(issue.element)}
|
|
106
|
+
>
|
|
107
|
+
<span class="text-destructive">●</span>
|
|
108
|
+
<span class="text-fg">{issue.message}</span>
|
|
109
|
+
</button>
|
|
110
|
+
{/each}
|
|
111
|
+
{/if}
|
|
112
|
+
</details>
|
|
113
|
+
{/each}
|
|
114
|
+
</div>
|
|
115
|
+
|
|
116
|
+
<footer
|
|
117
|
+
class="flex items-center gap-(--era-gap) px-(--era-inset-sm) py-(--era-gap) text-muted shadow-[inset_0_0.5px_0_0_var(--color-border)]"
|
|
118
|
+
>
|
|
119
|
+
<kbd class="rounded-(--era-rd-xs) bg-hover px-(--era-inset-sm) text-fg">
|
|
120
|
+
{isMac ? '⌘' : 'ctrl'}⇧{key.toUpperCase()}
|
|
121
|
+
</kbd>
|
|
122
|
+
<span>toggle</span>
|
|
123
|
+
</footer>
|
|
124
|
+
</div>
|
|
125
|
+
{/if}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
/** Scope audits to a subtree. Defaults to document.body. */
|
|
3
|
+
root?: HTMLElement;
|
|
4
|
+
/** Shortcut letter (cmd/ctrl + shift + key). Default: "a". */
|
|
5
|
+
key?: string;
|
|
6
|
+
}
|
|
7
|
+
declare const AuditOverlay: import("svelte").Component<Props, {}, "">;
|
|
8
|
+
type AuditOverlay = ReturnType<typeof AuditOverlay>;
|
|
9
|
+
export default AuditOverlay;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
## Usage
|
|
2
|
+
|
|
3
|
+
```svelte
|
|
4
|
+
<script>
|
|
5
|
+
import { Badge } from '$lib/ui/badge';
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<Badge>draft</Badge>
|
|
9
|
+
<Badge tone="accent">new</Badge>
|
|
10
|
+
<Badge tone="success">passing</Badge>
|
|
11
|
+
<Badge tone="destructive">failing</Badge>
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Notes
|
|
15
|
+
|
|
16
|
+
- Non-interactive. For dismissible tokens use `Chip`. For labelled pairs use `KV`.
|
|
17
|
+
- Uses the `xxs` tier tokens (height, radius, inset).
|
|
18
|
+
- Inter-icon gap tightens to `--era-inset-xxs` when an SVG is present.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Bits UI leverage audit
|
|
2
|
+
|
|
3
|
+
_Date: 2026-04-22_
|
|
4
|
+
|
|
5
|
+
## High-level status
|
|
6
|
+
|
|
7
|
+
Era UI already wraps most of the major Bits UI primitives (accordion, dialog, menus, date/time fields, calendar/date pickers, command, select/combobox, etc.).
|
|
8
|
+
|
|
9
|
+
## Components that are **custom-only** today
|
|
10
|
+
|
|
11
|
+
These directories currently do not import `bits-ui` and are intentionally custom presentation components:
|
|
12
|
+
|
|
13
|
+
- `badge`
|
|
14
|
+
- `bar`
|
|
15
|
+
- `button-group`
|
|
16
|
+
- `card`
|
|
17
|
+
- `chip`
|
|
18
|
+
- `code-block`
|
|
19
|
+
- `file-upload`
|
|
20
|
+
- `input`
|
|
21
|
+
- `kv`
|
|
22
|
+
- `mode`
|
|
23
|
+
- `skeleton`
|
|
24
|
+
- `table`
|
|
25
|
+
|
|
26
|
+
### Which of these are likely fine as custom components
|
|
27
|
+
|
|
28
|
+
No direct Bits UI primitive exists for these semantic/presentational pieces:
|
|
29
|
+
|
|
30
|
+
- `badge`, `bar`, `button-group`, `card`, `chip`, `code-block`, `kv`, `mode`, `skeleton`, `table`
|
|
31
|
+
|
|
32
|
+
### One likely improvement area
|
|
33
|
+
|
|
34
|
+
- `input` can stay native for simple text input, but if you want richer semantics and stronger consistency with the rest of the library, consider introducing wrappers around Bits UI field-family components (`DateField`, `TimeField`, etc.) as your recommended form surface. This is more of a product/design-system choice than a correctness gap.
|
|
35
|
+
|
|
36
|
+
- `file-upload` has no first-class Bits UI file-upload primitive, so your custom drag/drop implementation is expected.
|
|
37
|
+
|
|
38
|
+
## Bits UI primitives available but not wrapped yet
|
|
39
|
+
|
|
40
|
+
Bits UI currently exposes additional primitives that are not represented in `src/lib/ui` yet:
|
|
41
|
+
|
|
42
|
+
- `avatar`
|
|
43
|
+
- `collapsible`
|
|
44
|
+
- `link-preview`
|
|
45
|
+
- `menu`
|
|
46
|
+
- `navigation-menu`
|
|
47
|
+
- `range-calendar`
|
|
48
|
+
- `rating-group`
|
|
49
|
+
- `toggle-group`
|
|
50
|
+
- `toolbar`
|
|
51
|
+
|
|
52
|
+
If your design system roadmap includes any of those UX patterns, adding wrappers would be the main way to “take fuller advantage” of Bits UI from where the repo is today.
|
|
53
|
+
|
|
54
|
+
## Practical recommendations
|
|
55
|
+
|
|
56
|
+
1. **Prioritize wrappers with immediate UX value**: `avatar`, `collapsible`, `toggle-group`, `toolbar`.
|
|
57
|
+
2. **Document intentional non-Bits components** (`card`, `badge`, `table`, `skeleton`) so contributors know these are design primitives, not missing migrations.
|
|
58
|
+
3. **Keep custom `file-upload`** unless Bits UI adds a dedicated primitive later.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
## Usage
|
|
2
|
+
|
|
3
|
+
```svelte
|
|
4
|
+
<script>
|
|
5
|
+
import { Button } from '$lib/ui/button';
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<Button onclick={() => console.log('clicked')}>Save</Button>
|
|
9
|
+
<Button tone="accent" size="sm">Confirm</Button>
|
|
10
|
+
<Button tone="destructive" variant="link">Delete</Button>
|
|
11
|
+
<Button icon size="icon" aria-label="Close"><X /></Button>
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Notes
|
|
15
|
+
|
|
16
|
+
- Heights, radii, paddings, and gaps come from density tokens — never hard-code px.
|
|
17
|
+
- `link` variant intentionally does not change color on hover (underline only) so it reads as static prose until confirmed interactive.
|
|
18
|
+
- For a segmented row of buttons, use `ButtonGroup`.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
## Usage
|
|
2
|
+
|
|
3
|
+
```svelte
|
|
4
|
+
<script>
|
|
5
|
+
import { Chip } from '$lib/ui/chip';
|
|
6
|
+
|
|
7
|
+
let tags = $state(['alpha', 'beta', 'gamma']);
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
{#each tags as tag}
|
|
11
|
+
<Chip ondismiss={() => (tags = tags.filter((t) => t !== tag))}>
|
|
12
|
+
{tag}
|
|
13
|
+
</Chip>
|
|
14
|
+
{/each}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Notes
|
|
18
|
+
|
|
19
|
+
- Internal pointerdown/up events on the dismiss button are stopped from bubbling — this prevents accidental toggling when a Chip is nested inside a Select/Popover trigger.
|
|
20
|
+
- Uses the `xxs` tier tokens (height, radius, inset). Part of the Badge/Chip/KV "tag" family.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ComponentEntry } from '../../routes/registry.js';
|
|
2
|
+
import type { RootExport, SubExport } from './component-source-scanners.js';
|
|
3
|
+
export interface ComponentDocSources {
|
|
4
|
+
rootExports: Record<string, RootExport>;
|
|
5
|
+
subExportsBySlug: Record<string, SubExport[]>;
|
|
6
|
+
svelteBySlug: Record<string, Record<string, string>>;
|
|
7
|
+
}
|
|
8
|
+
export declare function buildComponentDocFromSources(entry: ComponentEntry, sources: ComponentDocSources, appendix?: string): string;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { extractProps } from './extract-props.js';
|
|
2
|
+
export function buildComponentDocFromSources(entry, sources, appendix) {
|
|
3
|
+
const { slug, name, description } = entry;
|
|
4
|
+
const root = sources.rootExports[slug];
|
|
5
|
+
const lines = [`# ${name}`, '', description, ''];
|
|
6
|
+
if (!root) {
|
|
7
|
+
if (appendix) {
|
|
8
|
+
const trimmed = stripRedundantHeader(appendix).trim();
|
|
9
|
+
if (trimmed)
|
|
10
|
+
lines.push(trimmed, '');
|
|
11
|
+
}
|
|
12
|
+
return lines.join('\n');
|
|
13
|
+
}
|
|
14
|
+
lines.push('## Import', '', '```ts', `import { ${root.alias} } from "$lib/ui/${slug}";`, '```', '');
|
|
15
|
+
const subs = sources.subExportsBySlug[slug] ?? [];
|
|
16
|
+
const files = sources.svelteBySlug[slug] ?? {};
|
|
17
|
+
if (root.kind === 'namespace') {
|
|
18
|
+
lines.push('Composed from sub-components — compose explicitly at the call site:', '', ...subs.map((s) => `- \`${root.alias}.${s.name}\``), '');
|
|
19
|
+
for (const sub of subs) {
|
|
20
|
+
lines.push(`## ${root.alias}.${sub.name}`, '');
|
|
21
|
+
if (sub.source.kind === 'passthrough') {
|
|
22
|
+
lines.push(`Re-exports \`${sub.source.ref}\` directly — see [bits-ui docs](https://bits-ui.com) for its full API.`, '');
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const spec = extractProps(files[sub.source.file] ?? '');
|
|
26
|
+
lines.push(...renderPropsSection(spec));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
const sub = subs.find((s) => s.source.kind === 'file');
|
|
31
|
+
const file = sub && sub.source.kind === 'file' ? sub.source.file : `${slug}.svelte`;
|
|
32
|
+
const spec = extractProps(files[file] ?? '');
|
|
33
|
+
lines.push('## Props', '');
|
|
34
|
+
lines.push(...renderPropsSection(spec));
|
|
35
|
+
}
|
|
36
|
+
if (appendix) {
|
|
37
|
+
const trimmed = stripRedundantHeader(appendix).trim();
|
|
38
|
+
if (trimmed)
|
|
39
|
+
lines.push(trimmed, '');
|
|
40
|
+
}
|
|
41
|
+
return lines.join('\n');
|
|
42
|
+
}
|
|
43
|
+
function renderPropsSection(spec) {
|
|
44
|
+
if (!spec)
|
|
45
|
+
return ['_Props could not be parsed from source._', ''];
|
|
46
|
+
const out = [];
|
|
47
|
+
for (const inh of spec.inherits) {
|
|
48
|
+
out.push(`Inherits all props from \`${inh}\`.`);
|
|
49
|
+
}
|
|
50
|
+
if (spec.inherits.length)
|
|
51
|
+
out.push('');
|
|
52
|
+
if (!spec.props.length) {
|
|
53
|
+
if (!spec.inherits.length)
|
|
54
|
+
out.push('_No wrapper-specific props._', '');
|
|
55
|
+
return out;
|
|
56
|
+
}
|
|
57
|
+
out.push('| Prop | Type | Default | Notes |');
|
|
58
|
+
out.push('|------|------|---------|-------|');
|
|
59
|
+
for (const p of spec.props) {
|
|
60
|
+
const notes = [p.bindable ? 'bindable' : '', p.description ?? ''].filter(Boolean).join(' — ');
|
|
61
|
+
out.push(`| \`${p.name}${p.optional ? '?' : ''}\` | ${fmtCode(p.type)} | ${p.default !== undefined ? fmtCode(p.default) : '—'} | ${notes || '—'} |`);
|
|
62
|
+
}
|
|
63
|
+
out.push('');
|
|
64
|
+
return out;
|
|
65
|
+
}
|
|
66
|
+
function fmtCode(s) {
|
|
67
|
+
const normalized = s.replace(/\s+/g, ' ').trim().replace(/\|/g, '\\|');
|
|
68
|
+
return `\`${normalized}\``;
|
|
69
|
+
}
|
|
70
|
+
function stripRedundantHeader(md) {
|
|
71
|
+
return md.replace(/^#\s+[^\n]+\n+/, '');
|
|
72
|
+
}
|