@furystack/shades-common-components 13.4.1 → 14.0.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/CHANGELOG.md +85 -0
- package/README.md +3 -3
- package/esm/components/accordion/accordion-item.js +1 -1
- package/esm/components/accordion/accordion-item.js.map +1 -1
- package/esm/components/accordion/accordion.js +1 -1
- package/esm/components/accordion/accordion.js.map +1 -1
- package/esm/components/alert.js +1 -1
- package/esm/components/alert.js.map +1 -1
- package/esm/components/app-bar-link.js +1 -1
- package/esm/components/app-bar-link.js.map +1 -1
- package/esm/components/app-bar.js +1 -1
- package/esm/components/app-bar.js.map +1 -1
- package/esm/components/avatar.js +1 -1
- package/esm/components/avatar.js.map +1 -1
- package/esm/components/badge.js +1 -1
- package/esm/components/badge.js.map +1 -1
- package/esm/components/breadcrumb.js +1 -1
- package/esm/components/breadcrumb.js.map +1 -1
- package/esm/components/breadcrumb.spec.js +3 -3
- package/esm/components/breadcrumb.spec.js.map +1 -1
- package/esm/components/button-group.js +4 -4
- package/esm/components/button-group.js.map +1 -1
- package/esm/components/button.js +1 -1
- package/esm/components/button.js.map +1 -1
- package/esm/components/button.spec.js +1 -1
- package/esm/components/button.spec.js.map +1 -1
- package/esm/components/cache-view.js +1 -1
- package/esm/components/cache-view.js.map +1 -1
- package/esm/components/cache-view.spec.js +2 -2
- package/esm/components/cache-view.spec.js.map +1 -1
- package/esm/components/card.js +5 -5
- package/esm/components/card.js.map +1 -1
- package/esm/components/carousel.js +1 -1
- package/esm/components/carousel.js.map +1 -1
- package/esm/components/chip.js +1 -1
- package/esm/components/chip.js.map +1 -1
- package/esm/components/circular-progress.d.ts +2 -4
- package/esm/components/circular-progress.d.ts.map +1 -1
- package/esm/components/circular-progress.js +3 -6
- package/esm/components/circular-progress.js.map +1 -1
- package/esm/components/circular-progress.spec.js +19 -14
- package/esm/components/circular-progress.spec.js.map +1 -1
- package/esm/components/command-palette/command-palette-input.js +1 -1
- package/esm/components/command-palette/command-palette-input.js.map +1 -1
- package/esm/components/command-palette/command-palette-suggestion-list.js +1 -1
- package/esm/components/command-palette/command-palette-suggestion-list.js.map +1 -1
- package/esm/components/command-palette/command-palette-suggestion-list.spec.js +1 -1
- package/esm/components/command-palette/command-palette-suggestion-list.spec.js.map +1 -1
- package/esm/components/command-palette/index.js +1 -1
- package/esm/components/command-palette/index.js.map +1 -1
- package/esm/components/context-menu/context-menu-item.js +1 -1
- package/esm/components/context-menu/context-menu-item.js.map +1 -1
- package/esm/components/context-menu/context-menu.js +1 -1
- package/esm/components/context-menu/context-menu.js.map +1 -1
- package/esm/components/data-grid/body.js +1 -1
- package/esm/components/data-grid/body.js.map +1 -1
- package/esm/components/data-grid/data-grid-row.js +1 -1
- package/esm/components/data-grid/data-grid-row.js.map +1 -1
- package/esm/components/data-grid/data-grid.d.ts +5 -2
- package/esm/components/data-grid/data-grid.d.ts.map +1 -1
- package/esm/components/data-grid/data-grid.js +5 -3
- package/esm/components/data-grid/data-grid.js.map +1 -1
- package/esm/components/data-grid/data-grid.spec.js +60 -60
- package/esm/components/data-grid/data-grid.spec.js.map +1 -1
- package/esm/components/data-grid/filters/boolean-filter.d.ts +2 -2
- package/esm/components/data-grid/filters/boolean-filter.d.ts.map +1 -1
- package/esm/components/data-grid/filters/boolean-filter.js +4 -4
- package/esm/components/data-grid/filters/boolean-filter.js.map +1 -1
- package/esm/components/data-grid/filters/boolean-filter.spec.js +18 -17
- package/esm/components/data-grid/filters/boolean-filter.spec.js.map +1 -1
- package/esm/components/data-grid/filters/date-filter.d.ts +2 -2
- package/esm/components/data-grid/filters/date-filter.d.ts.map +1 -1
- package/esm/components/data-grid/filters/date-filter.js +6 -6
- package/esm/components/data-grid/filters/date-filter.js.map +1 -1
- package/esm/components/data-grid/filters/date-filter.spec.js +26 -21
- package/esm/components/data-grid/filters/date-filter.spec.js.map +1 -1
- package/esm/components/data-grid/filters/enum-filter.d.ts +2 -2
- package/esm/components/data-grid/filters/enum-filter.d.ts.map +1 -1
- package/esm/components/data-grid/filters/enum-filter.js +5 -5
- package/esm/components/data-grid/filters/enum-filter.js.map +1 -1
- package/esm/components/data-grid/filters/enum-filter.spec.js +21 -19
- package/esm/components/data-grid/filters/enum-filter.spec.js.map +1 -1
- package/esm/components/data-grid/filters/filter-dropdown.js +1 -1
- package/esm/components/data-grid/filters/filter-dropdown.js.map +1 -1
- package/esm/components/data-grid/filters/number-filter.d.ts +2 -2
- package/esm/components/data-grid/filters/number-filter.d.ts.map +1 -1
- package/esm/components/data-grid/filters/number-filter.js +5 -5
- package/esm/components/data-grid/filters/number-filter.js.map +1 -1
- package/esm/components/data-grid/filters/number-filter.spec.js +23 -21
- package/esm/components/data-grid/filters/number-filter.spec.js.map +1 -1
- package/esm/components/data-grid/filters/string-filter.d.ts +2 -2
- package/esm/components/data-grid/filters/string-filter.d.ts.map +1 -1
- package/esm/components/data-grid/filters/string-filter.js +5 -5
- package/esm/components/data-grid/filters/string-filter.js.map +1 -1
- package/esm/components/data-grid/filters/string-filter.spec.js +21 -19
- package/esm/components/data-grid/filters/string-filter.spec.js.map +1 -1
- package/esm/components/data-grid/footer.d.ts +2 -2
- package/esm/components/data-grid/footer.d.ts.map +1 -1
- package/esm/components/data-grid/footer.js +8 -13
- package/esm/components/data-grid/footer.js.map +1 -1
- package/esm/components/data-grid/footer.spec.js +38 -27
- package/esm/components/data-grid/footer.spec.js.map +1 -1
- package/esm/components/data-grid/header.d.ts +6 -6
- package/esm/components/data-grid/header.d.ts.map +1 -1
- package/esm/components/data-grid/header.js +16 -17
- package/esm/components/data-grid/header.js.map +1 -1
- package/esm/components/data-grid/header.spec.js +66 -60
- package/esm/components/data-grid/header.spec.js.map +1 -1
- package/esm/components/data-grid/selection-cell.js +1 -1
- package/esm/components/data-grid/selection-cell.js.map +1 -1
- package/esm/components/dialog.js +1 -1
- package/esm/components/dialog.js.map +1 -1
- package/esm/components/divider.js +1 -1
- package/esm/components/divider.js.map +1 -1
- package/esm/components/drawer/drawer-toggle-button.js +1 -1
- package/esm/components/drawer/drawer-toggle-button.js.map +1 -1
- package/esm/components/drawer/index.js +1 -1
- package/esm/components/drawer/index.js.map +1 -1
- package/esm/components/dropdown.js +1 -1
- package/esm/components/dropdown.js.map +1 -1
- package/esm/components/fab.js +1 -1
- package/esm/components/fab.js.map +1 -1
- package/esm/components/form.js +1 -1
- package/esm/components/form.js.map +1 -1
- package/esm/components/grid.js +1 -1
- package/esm/components/grid.js.map +1 -1
- package/esm/components/icons/icon.js +1 -1
- package/esm/components/icons/icon.js.map +1 -1
- package/esm/components/image.js +2 -2
- package/esm/components/image.js.map +1 -1
- package/esm/components/inputs/autocomplete.js +1 -1
- package/esm/components/inputs/autocomplete.js.map +1 -1
- package/esm/components/inputs/checkbox.js +1 -1
- package/esm/components/inputs/checkbox.js.map +1 -1
- package/esm/components/inputs/checkbox.spec.js +1 -1
- package/esm/components/inputs/checkbox.spec.js.map +1 -1
- package/esm/components/inputs/input-number.js +1 -1
- package/esm/components/inputs/input-number.js.map +1 -1
- package/esm/components/inputs/input-number.spec.js +1 -1
- package/esm/components/inputs/input-number.spec.js.map +1 -1
- package/esm/components/inputs/input.js +1 -1
- package/esm/components/inputs/input.js.map +1 -1
- package/esm/components/inputs/input.spec.js +1 -1
- package/esm/components/inputs/input.spec.js.map +1 -1
- package/esm/components/inputs/radio-group.js +1 -1
- package/esm/components/inputs/radio-group.js.map +1 -1
- package/esm/components/inputs/radio-group.spec.js +1 -1
- package/esm/components/inputs/radio-group.spec.js.map +1 -1
- package/esm/components/inputs/radio.js +1 -1
- package/esm/components/inputs/radio.js.map +1 -1
- package/esm/components/inputs/radio.spec.js +1 -1
- package/esm/components/inputs/radio.spec.js.map +1 -1
- package/esm/components/inputs/select.js +1 -1
- package/esm/components/inputs/select.js.map +1 -1
- package/esm/components/inputs/slider.js +1 -1
- package/esm/components/inputs/slider.js.map +1 -1
- package/esm/components/inputs/switch.js +1 -1
- package/esm/components/inputs/switch.js.map +1 -1
- package/esm/components/inputs/switch.spec.js +1 -1
- package/esm/components/inputs/switch.spec.js.map +1 -1
- package/esm/components/inputs/text-area.js +1 -1
- package/esm/components/inputs/text-area.js.map +1 -1
- package/esm/components/inputs/text-area.spec.js +1 -1
- package/esm/components/inputs/text-area.spec.js.map +1 -1
- package/esm/components/linear-progress.d.ts +2 -4
- package/esm/components/linear-progress.d.ts.map +1 -1
- package/esm/components/linear-progress.js +3 -6
- package/esm/components/linear-progress.js.map +1 -1
- package/esm/components/linear-progress.spec.js +21 -18
- package/esm/components/linear-progress.spec.js.map +1 -1
- package/esm/components/list/list-item.js +1 -1
- package/esm/components/list/list-item.js.map +1 -1
- package/esm/components/list/list.js +1 -1
- package/esm/components/list/list.js.map +1 -1
- package/esm/components/loader.js +1 -1
- package/esm/components/loader.js.map +1 -1
- package/esm/components/loader.spec.js +1 -1
- package/esm/components/loader.spec.js.map +1 -1
- package/esm/components/markdown/markdown-display.js +1 -1
- package/esm/components/markdown/markdown-display.js.map +1 -1
- package/esm/components/markdown/markdown-display.spec.js +1 -1
- package/esm/components/markdown/markdown-display.spec.js.map +1 -1
- package/esm/components/markdown/markdown-editor.js +1 -1
- package/esm/components/markdown/markdown-editor.js.map +1 -1
- package/esm/components/markdown/markdown-editor.spec.js +1 -1
- package/esm/components/markdown/markdown-editor.spec.js.map +1 -1
- package/esm/components/markdown/markdown-input.js +1 -1
- package/esm/components/markdown/markdown-input.js.map +1 -1
- package/esm/components/markdown/markdown-input.spec.js +1 -1
- package/esm/components/markdown/markdown-input.spec.js.map +1 -1
- package/esm/components/menu/menu.js +1 -1
- package/esm/components/menu/menu.js.map +1 -1
- package/esm/components/modal.js +1 -1
- package/esm/components/modal.js.map +1 -1
- package/esm/components/modal.spec.js +3 -3
- package/esm/components/modal.spec.js.map +1 -1
- package/esm/components/noty-list.js +2 -2
- package/esm/components/noty-list.js.map +1 -1
- package/esm/components/page-container/index.d.ts.map +1 -1
- package/esm/components/page-container/index.js +2 -2
- package/esm/components/page-container/index.js.map +1 -1
- package/esm/components/page-container/index.spec.js +5 -4
- package/esm/components/page-container/index.spec.js.map +1 -1
- package/esm/components/page-container/page-header.js +1 -1
- package/esm/components/page-container/page-header.js.map +1 -1
- package/esm/components/page-layout/index.d.ts +6 -0
- package/esm/components/page-layout/index.d.ts.map +1 -1
- package/esm/components/page-layout/index.js +29 -14
- package/esm/components/page-layout/index.js.map +1 -1
- package/esm/components/page-layout/index.spec.js +119 -0
- package/esm/components/page-layout/index.spec.js.map +1 -1
- package/esm/components/pagination.js +1 -1
- package/esm/components/pagination.js.map +1 -1
- package/esm/components/paper.js +1 -1
- package/esm/components/paper.js.map +1 -1
- package/esm/components/rating.js +1 -1
- package/esm/components/rating.js.map +1 -1
- package/esm/components/rating.spec.js +1 -1
- package/esm/components/rating.spec.js.map +1 -1
- package/esm/components/result.js +1 -1
- package/esm/components/result.js.map +1 -1
- package/esm/components/skeleton.js +1 -1
- package/esm/components/skeleton.js.map +1 -1
- package/esm/components/suggest/index.js +1 -1
- package/esm/components/suggest/index.js.map +1 -1
- package/esm/components/suggest/index.spec.js +1 -1
- package/esm/components/suggest/index.spec.js.map +1 -1
- package/esm/components/suggest/suggest-input.js +1 -1
- package/esm/components/suggest/suggest-input.js.map +1 -1
- package/esm/components/suggest/suggest-input.spec.js +1 -1
- package/esm/components/suggest/suggest-input.spec.js.map +1 -1
- package/esm/components/suggest/suggestion-list.js +1 -1
- package/esm/components/suggest/suggestion-list.js.map +1 -1
- package/esm/components/suggest/suggestion-list.spec.js +1 -1
- package/esm/components/suggest/suggestion-list.spec.js.map +1 -1
- package/esm/components/tabs.js +2 -2
- package/esm/components/tabs.js.map +1 -1
- package/esm/components/timeline.js +2 -2
- package/esm/components/timeline.js.map +1 -1
- package/esm/components/tooltip.js +1 -1
- package/esm/components/tooltip.js.map +1 -1
- package/esm/components/tree/tree-item.js +1 -1
- package/esm/components/tree/tree-item.js.map +1 -1
- package/esm/components/tree/tree.js +1 -1
- package/esm/components/tree/tree.js.map +1 -1
- package/esm/components/typography.js +1 -1
- package/esm/components/typography.js.map +1 -1
- package/esm/components/wizard/index.js +1 -1
- package/esm/components/wizard/index.js.map +1 -1
- package/esm/components/wizard/index.spec.js +3 -3
- package/esm/components/wizard/index.spec.js.map +1 -1
- package/package.json +3 -3
- package/src/components/accordion/accordion-item.tsx +1 -1
- package/src/components/accordion/accordion.tsx +1 -1
- package/src/components/alert.tsx +1 -1
- package/src/components/app-bar-link.tsx +1 -1
- package/src/components/app-bar.tsx +1 -1
- package/src/components/avatar.tsx +1 -1
- package/src/components/badge.tsx +1 -1
- package/src/components/breadcrumb.spec.tsx +3 -3
- package/src/components/breadcrumb.tsx +1 -1
- package/src/components/button-group.tsx +4 -4
- package/src/components/button.spec.tsx +1 -1
- package/src/components/button.tsx +1 -1
- package/src/components/cache-view.spec.tsx +2 -2
- package/src/components/cache-view.tsx +3 -3
- package/src/components/card.tsx +5 -5
- package/src/components/carousel.tsx +1 -1
- package/src/components/chip.tsx +1 -1
- package/src/components/circular-progress.spec.tsx +20 -14
- package/src/components/circular-progress.tsx +5 -11
- package/src/components/command-palette/command-palette-input.tsx +1 -1
- package/src/components/command-palette/command-palette-suggestion-list.spec.tsx +1 -1
- package/src/components/command-palette/command-palette-suggestion-list.tsx +1 -1
- package/src/components/command-palette/index.tsx +1 -1
- package/src/components/context-menu/context-menu-item.tsx +1 -1
- package/src/components/context-menu/context-menu.tsx +1 -1
- package/src/components/data-grid/body.tsx +1 -1
- package/src/components/data-grid/data-grid-row.tsx +1 -1
- package/src/components/data-grid/data-grid.spec.tsx +62 -36
- package/src/components/data-grid/data-grid.tsx +14 -8
- package/src/components/data-grid/filters/boolean-filter.spec.tsx +29 -18
- package/src/components/data-grid/filters/boolean-filter.tsx +6 -6
- package/src/components/data-grid/filters/date-filter.spec.tsx +35 -22
- package/src/components/data-grid/filters/date-filter.tsx +8 -8
- package/src/components/data-grid/filters/enum-filter.spec.tsx +35 -20
- package/src/components/data-grid/filters/enum-filter.tsx +7 -7
- package/src/components/data-grid/filters/filter-dropdown.tsx +1 -1
- package/src/components/data-grid/filters/number-filter.spec.tsx +32 -22
- package/src/components/data-grid/filters/number-filter.tsx +7 -7
- package/src/components/data-grid/filters/string-filter.spec.tsx +32 -20
- package/src/components/data-grid/filters/string-filter.tsx +7 -7
- package/src/components/data-grid/footer.spec.tsx +79 -31
- package/src/components/data-grid/footer.tsx +10 -15
- package/src/components/data-grid/header.spec.tsx +152 -68
- package/src/components/data-grid/header.tsx +64 -27
- package/src/components/data-grid/selection-cell.tsx +1 -1
- package/src/components/dialog.tsx +1 -1
- package/src/components/divider.tsx +1 -1
- package/src/components/drawer/drawer-toggle-button.tsx +1 -1
- package/src/components/drawer/index.tsx +1 -1
- package/src/components/dropdown.tsx +1 -1
- package/src/components/fab.tsx +1 -1
- package/src/components/form.tsx +1 -1
- package/src/components/grid.tsx +1 -1
- package/src/components/icons/icon.tsx +1 -1
- package/src/components/image.tsx +2 -2
- package/src/components/inputs/autocomplete.tsx +1 -1
- package/src/components/inputs/checkbox.spec.tsx +1 -1
- package/src/components/inputs/checkbox.tsx +1 -1
- package/src/components/inputs/input-number.spec.tsx +1 -1
- package/src/components/inputs/input-number.tsx +1 -1
- package/src/components/inputs/input.spec.tsx +1 -1
- package/src/components/inputs/input.tsx +1 -1
- package/src/components/inputs/radio-group.spec.tsx +1 -1
- package/src/components/inputs/radio-group.tsx +1 -1
- package/src/components/inputs/radio.spec.tsx +1 -1
- package/src/components/inputs/radio.tsx +1 -1
- package/src/components/inputs/select.tsx +1 -1
- package/src/components/inputs/slider.tsx +1 -1
- package/src/components/inputs/switch.spec.tsx +1 -1
- package/src/components/inputs/switch.tsx +1 -1
- package/src/components/inputs/text-area.spec.tsx +1 -1
- package/src/components/inputs/text-area.tsx +1 -1
- package/src/components/linear-progress.spec.tsx +22 -18
- package/src/components/linear-progress.tsx +5 -11
- package/src/components/list/list-item.tsx +1 -1
- package/src/components/list/list.tsx +1 -1
- package/src/components/loader.spec.tsx +1 -1
- package/src/components/loader.tsx +1 -1
- package/src/components/markdown/markdown-display.spec.tsx +1 -1
- package/src/components/markdown/markdown-display.tsx +1 -1
- package/src/components/markdown/markdown-editor.spec.tsx +1 -1
- package/src/components/markdown/markdown-editor.tsx +1 -1
- package/src/components/markdown/markdown-input.spec.tsx +1 -1
- package/src/components/markdown/markdown-input.tsx +1 -1
- package/src/components/menu/menu.tsx +1 -1
- package/src/components/modal.spec.tsx +3 -3
- package/src/components/modal.tsx +1 -1
- package/src/components/noty-list.tsx +2 -2
- package/src/components/page-container/index.spec.tsx +5 -4
- package/src/components/page-container/index.tsx +8 -2
- package/src/components/page-container/page-header.tsx +1 -1
- package/src/components/page-layout/index.spec.tsx +173 -0
- package/src/components/page-layout/index.tsx +36 -14
- package/src/components/pagination.tsx +1 -1
- package/src/components/paper.tsx +1 -1
- package/src/components/rating.spec.tsx +1 -1
- package/src/components/rating.tsx +1 -1
- package/src/components/result.tsx +1 -1
- package/src/components/skeleton.tsx +1 -1
- package/src/components/suggest/index.spec.tsx +1 -1
- package/src/components/suggest/index.tsx +1 -1
- package/src/components/suggest/suggest-input.spec.tsx +1 -1
- package/src/components/suggest/suggest-input.tsx +1 -1
- package/src/components/suggest/suggestion-list.spec.tsx +1 -1
- package/src/components/suggest/suggestion-list.tsx +1 -1
- package/src/components/tabs.tsx +2 -2
- package/src/components/timeline.tsx +2 -2
- package/src/components/tooltip.tsx +1 -1
- package/src/components/tree/tree-item.tsx +1 -1
- package/src/components/tree/tree.tsx +1 -1
- package/src/components/typography.tsx +1 -1
- package/src/components/wizard/index.spec.tsx +3 -3
- package/src/components/wizard/index.tsx +1 -1
|
@@ -2,6 +2,7 @@ import { Injector } from '@furystack/inject'
|
|
|
2
2
|
import { createComponent, flushUpdates, initializeShadeRoot } from '@furystack/shades'
|
|
3
3
|
import { usingAsync } from '@furystack/utils'
|
|
4
4
|
import { afterEach, beforeEach, describe, expect, it } from 'vitest'
|
|
5
|
+
import { cssVariableTheme } from '../../services/css-variable-theme.js'
|
|
5
6
|
import { PageContainer } from './index.js'
|
|
6
7
|
|
|
7
8
|
describe('PageContainer component', () => {
|
|
@@ -76,7 +77,7 @@ describe('PageContainer component', () => {
|
|
|
76
77
|
})
|
|
77
78
|
|
|
78
79
|
describe('default styling', () => {
|
|
79
|
-
it('should apply default padding
|
|
80
|
+
it('should apply default padding from theme spacing', async () => {
|
|
80
81
|
await usingAsync(new Injector(), async (injector) => {
|
|
81
82
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
82
83
|
|
|
@@ -88,11 +89,11 @@ describe('PageContainer component', () => {
|
|
|
88
89
|
|
|
89
90
|
await flushUpdates()
|
|
90
91
|
const element = document.querySelector('div[is="shade-page-container"]') as HTMLDivElement
|
|
91
|
-
expect(element.style.padding).toBe(
|
|
92
|
+
expect(element.style.padding).toBe(cssVariableTheme.spacing.md)
|
|
92
93
|
})
|
|
93
94
|
})
|
|
94
95
|
|
|
95
|
-
it('should apply default gap
|
|
96
|
+
it('should apply default gap from theme spacing', async () => {
|
|
96
97
|
await usingAsync(new Injector(), async (injector) => {
|
|
97
98
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
98
99
|
|
|
@@ -104,7 +105,7 @@ describe('PageContainer component', () => {
|
|
|
104
105
|
|
|
105
106
|
await flushUpdates()
|
|
106
107
|
const element = document.querySelector('div[is="shade-page-container"]') as HTMLDivElement
|
|
107
|
-
expect(element.style.gap).toBe(
|
|
108
|
+
expect(element.style.gap).toBe(cssVariableTheme.spacing.md)
|
|
108
109
|
})
|
|
109
110
|
})
|
|
110
111
|
|
|
@@ -50,7 +50,7 @@ export type PageContainerProps = {
|
|
|
50
50
|
* ```
|
|
51
51
|
*/
|
|
52
52
|
export const PageContainer = Shade<PageContainerProps>({
|
|
53
|
-
|
|
53
|
+
customElementName: 'shade-page-container',
|
|
54
54
|
elementBase: HTMLDivElement,
|
|
55
55
|
elementBaseName: 'div',
|
|
56
56
|
css: {
|
|
@@ -62,7 +62,13 @@ export const PageContainer = Shade<PageContainerProps>({
|
|
|
62
62
|
position: 'relative',
|
|
63
63
|
},
|
|
64
64
|
render: ({ props, children, useHostProps }) => {
|
|
65
|
-
const {
|
|
65
|
+
const {
|
|
66
|
+
maxWidth = '100%',
|
|
67
|
+
centered = false,
|
|
68
|
+
padding = cssVariableTheme.spacing.md,
|
|
69
|
+
gap = cssVariableTheme.spacing.md,
|
|
70
|
+
fullHeight = true,
|
|
71
|
+
} = props
|
|
66
72
|
|
|
67
73
|
const hostStyle: Record<string, string> = {
|
|
68
74
|
maxWidth,
|
|
@@ -56,7 +56,7 @@ export type PageHeaderProps = {
|
|
|
56
56
|
* ```
|
|
57
57
|
*/
|
|
58
58
|
export const PageHeader = Shade<PageHeaderProps>({
|
|
59
|
-
|
|
59
|
+
customElementName: 'shade-page-header',
|
|
60
60
|
css: {
|
|
61
61
|
display: 'block',
|
|
62
62
|
fontFamily: cssVariableTheme.typography.fontFamily,
|
|
@@ -879,4 +879,177 @@ describe('PageLayout component', () => {
|
|
|
879
879
|
})
|
|
880
880
|
})
|
|
881
881
|
})
|
|
882
|
+
|
|
883
|
+
describe('Contained Mode', () => {
|
|
884
|
+
it('should set data-contained attribute on host when contained is true', async () => {
|
|
885
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
886
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
887
|
+
|
|
888
|
+
initializeShadeRoot({
|
|
889
|
+
injector,
|
|
890
|
+
rootElement,
|
|
891
|
+
jsxElement: (
|
|
892
|
+
<PageLayout contained>
|
|
893
|
+
<div>Content</div>
|
|
894
|
+
</PageLayout>
|
|
895
|
+
),
|
|
896
|
+
})
|
|
897
|
+
|
|
898
|
+
await flushUpdates()
|
|
899
|
+
const pageLayout = document.querySelector('shade-page-layout')
|
|
900
|
+
expect(pageLayout?.hasAttribute('data-contained')).toBe(true)
|
|
901
|
+
})
|
|
902
|
+
})
|
|
903
|
+
|
|
904
|
+
it('should not set data-contained attribute when contained is not set', async () => {
|
|
905
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
906
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
907
|
+
|
|
908
|
+
initializeShadeRoot({
|
|
909
|
+
injector,
|
|
910
|
+
rootElement,
|
|
911
|
+
jsxElement: (
|
|
912
|
+
<PageLayout>
|
|
913
|
+
<div>Content</div>
|
|
914
|
+
</PageLayout>
|
|
915
|
+
),
|
|
916
|
+
})
|
|
917
|
+
|
|
918
|
+
await flushUpdates()
|
|
919
|
+
const pageLayout = document.querySelector('shade-page-layout')
|
|
920
|
+
expect(pageLayout?.hasAttribute('data-contained')).toBe(false)
|
|
921
|
+
})
|
|
922
|
+
})
|
|
923
|
+
|
|
924
|
+
it('should have absolute positioning when contained', async () => {
|
|
925
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
926
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
927
|
+
|
|
928
|
+
initializeShadeRoot({
|
|
929
|
+
injector,
|
|
930
|
+
rootElement,
|
|
931
|
+
jsxElement: (
|
|
932
|
+
<PageLayout contained>
|
|
933
|
+
<div>Content</div>
|
|
934
|
+
</PageLayout>
|
|
935
|
+
),
|
|
936
|
+
})
|
|
937
|
+
|
|
938
|
+
await flushUpdates()
|
|
939
|
+
const pageLayout = document.querySelector('shade-page-layout') as HTMLElement
|
|
940
|
+
const computedStyle = window.getComputedStyle(pageLayout)
|
|
941
|
+
expect(computedStyle.position).toBe('absolute')
|
|
942
|
+
})
|
|
943
|
+
})
|
|
944
|
+
|
|
945
|
+
it('should work with AppBar and drawers in contained mode', async () => {
|
|
946
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
947
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
948
|
+
|
|
949
|
+
initializeShadeRoot({
|
|
950
|
+
injector,
|
|
951
|
+
rootElement,
|
|
952
|
+
jsxElement: (
|
|
953
|
+
<PageLayout
|
|
954
|
+
contained
|
|
955
|
+
appBar={{
|
|
956
|
+
variant: 'permanent',
|
|
957
|
+
component: <div>AppBar</div>,
|
|
958
|
+
}}
|
|
959
|
+
drawer={{
|
|
960
|
+
left: {
|
|
961
|
+
variant: 'collapsible',
|
|
962
|
+
component: <div>Left Drawer</div>,
|
|
963
|
+
},
|
|
964
|
+
}}
|
|
965
|
+
>
|
|
966
|
+
<div>Content</div>
|
|
967
|
+
</PageLayout>
|
|
968
|
+
),
|
|
969
|
+
})
|
|
970
|
+
|
|
971
|
+
await flushUpdates()
|
|
972
|
+
|
|
973
|
+
const pageLayout = document.querySelector('shade-page-layout') as HTMLElement & { injector: Injector }
|
|
974
|
+
expect(pageLayout.hasAttribute('data-contained')).toBe(true)
|
|
975
|
+
expect(document.body.innerHTML).toContain('page-layout-appbar')
|
|
976
|
+
expect(document.body.innerHTML).toContain('page-layout-drawer-left')
|
|
977
|
+
expect(document.body.innerHTML).toContain('page-layout-content')
|
|
978
|
+
|
|
979
|
+
const layoutService = pageLayout.injector.getInstance(LayoutService)
|
|
980
|
+
expect(layoutService.drawerState.getValue().left?.open).toBe(true)
|
|
981
|
+
})
|
|
982
|
+
})
|
|
983
|
+
|
|
984
|
+
it('should support drawer toggle in contained mode', async () => {
|
|
985
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
986
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
987
|
+
|
|
988
|
+
initializeShadeRoot({
|
|
989
|
+
injector,
|
|
990
|
+
rootElement,
|
|
991
|
+
jsxElement: (
|
|
992
|
+
<PageLayout
|
|
993
|
+
contained
|
|
994
|
+
drawer={{
|
|
995
|
+
left: {
|
|
996
|
+
variant: 'collapsible',
|
|
997
|
+
component: <div>Left Drawer</div>,
|
|
998
|
+
},
|
|
999
|
+
}}
|
|
1000
|
+
>
|
|
1001
|
+
<div>Content</div>
|
|
1002
|
+
</PageLayout>
|
|
1003
|
+
),
|
|
1004
|
+
})
|
|
1005
|
+
|
|
1006
|
+
await flushUpdates()
|
|
1007
|
+
|
|
1008
|
+
const pageLayout = document.querySelector('shade-page-layout') as HTMLElement & { injector: Injector }
|
|
1009
|
+
const layoutService = pageLayout.injector.getInstance(LayoutService)
|
|
1010
|
+
|
|
1011
|
+
expect(pageLayout.hasAttribute('data-drawer-left-closed')).toBe(false)
|
|
1012
|
+
|
|
1013
|
+
layoutService.setDrawerOpen('left', false)
|
|
1014
|
+
await flushUpdates()
|
|
1015
|
+
|
|
1016
|
+
expect(pageLayout.hasAttribute('data-drawer-left-closed')).toBe(true)
|
|
1017
|
+
})
|
|
1018
|
+
})
|
|
1019
|
+
|
|
1020
|
+
it('should support temporary drawer backdrop click in contained mode', async () => {
|
|
1021
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
1022
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
1023
|
+
|
|
1024
|
+
initializeShadeRoot({
|
|
1025
|
+
injector,
|
|
1026
|
+
rootElement,
|
|
1027
|
+
jsxElement: (
|
|
1028
|
+
<PageLayout
|
|
1029
|
+
contained
|
|
1030
|
+
drawer={{
|
|
1031
|
+
left: {
|
|
1032
|
+
variant: 'temporary',
|
|
1033
|
+
defaultOpen: true,
|
|
1034
|
+
component: <div>Temporary Drawer</div>,
|
|
1035
|
+
},
|
|
1036
|
+
}}
|
|
1037
|
+
>
|
|
1038
|
+
<div>Content</div>
|
|
1039
|
+
</PageLayout>
|
|
1040
|
+
),
|
|
1041
|
+
})
|
|
1042
|
+
|
|
1043
|
+
await flushUpdates()
|
|
1044
|
+
const pageLayout = document.querySelector('shade-page-layout')
|
|
1045
|
+
expect(pageLayout?.hasAttribute('data-backdrop-visible')).toBe(true)
|
|
1046
|
+
|
|
1047
|
+
const backdrop = document.querySelector('.page-layout-drawer-backdrop') as HTMLElement
|
|
1048
|
+
backdrop.click()
|
|
1049
|
+
await flushUpdates()
|
|
1050
|
+
|
|
1051
|
+
expect(pageLayout?.hasAttribute('data-drawer-left-closed')).toBe(true)
|
|
1052
|
+
})
|
|
1053
|
+
})
|
|
1054
|
+
})
|
|
882
1055
|
})
|
|
@@ -46,6 +46,12 @@ export type PageLayoutProps = {
|
|
|
46
46
|
topGap?: string
|
|
47
47
|
/** Gap between the drawers and the content area (CSS value). Default: '0px' */
|
|
48
48
|
sideGap?: string
|
|
49
|
+
/**
|
|
50
|
+
* When true, uses `position: absolute` instead of `position: fixed` so the
|
|
51
|
+
* layout fills its nearest positioned ancestor rather than the viewport.
|
|
52
|
+
* This enables nesting PageLayout instances (e.g. in a showcase grid).
|
|
53
|
+
*/
|
|
54
|
+
contained?: boolean
|
|
49
55
|
}
|
|
50
56
|
|
|
51
57
|
const DEFAULT_APPBAR_HEIGHT = '48px'
|
|
@@ -86,7 +92,7 @@ const DEFAULT_DRAWER_WIDTH = '240px'
|
|
|
86
92
|
* ```
|
|
87
93
|
*/
|
|
88
94
|
export const PageLayout = Shade<PageLayoutProps>({
|
|
89
|
-
|
|
95
|
+
customElementName: 'shade-page-layout',
|
|
90
96
|
css: {
|
|
91
97
|
display: 'block',
|
|
92
98
|
fontFamily: cssVariableTheme.typography.fontFamily,
|
|
@@ -102,8 +108,8 @@ export const PageLayout = Shade<PageLayoutProps>({
|
|
|
102
108
|
margin: '0',
|
|
103
109
|
},
|
|
104
110
|
|
|
105
|
-
// AppBar container
|
|
106
|
-
'& .page-layout-appbar': {
|
|
111
|
+
// AppBar container (> * > scopes to the wrapper div to prevent bleeding into nested PageLayouts)
|
|
112
|
+
'& > * > .page-layout-appbar': {
|
|
107
113
|
position: 'fixed',
|
|
108
114
|
top: '0',
|
|
109
115
|
left: '0',
|
|
@@ -114,18 +120,18 @@ export const PageLayout = Shade<PageLayoutProps>({
|
|
|
114
120
|
},
|
|
115
121
|
|
|
116
122
|
// Auto-hide AppBar styles (controlled via host data attributes)
|
|
117
|
-
'&[data-appbar-auto-hide] .page-layout-appbar': {
|
|
123
|
+
'&[data-appbar-auto-hide] > * > .page-layout-appbar': {
|
|
118
124
|
top: 'calc(-1 * var(--layout-appbar-height, 48px))',
|
|
119
125
|
},
|
|
120
|
-
'&[data-appbar-auto-hide] .page-layout-appbar:hover': {
|
|
126
|
+
'&[data-appbar-auto-hide] > * > .page-layout-appbar:hover': {
|
|
121
127
|
top: '0',
|
|
122
128
|
},
|
|
123
|
-
'&[data-appbar-auto-hide][data-appbar-visible] .page-layout-appbar': {
|
|
129
|
+
'&[data-appbar-auto-hide][data-appbar-visible] > * > .page-layout-appbar': {
|
|
124
130
|
top: '0',
|
|
125
131
|
},
|
|
126
132
|
|
|
127
133
|
// Drawer containers - use CSS transitions
|
|
128
|
-
'& .page-layout-drawer': {
|
|
134
|
+
'& > * > .page-layout-drawer': {
|
|
129
135
|
position: 'fixed',
|
|
130
136
|
top: 'var(--layout-appbar-height, 48px)',
|
|
131
137
|
bottom: '0',
|
|
@@ -135,13 +141,13 @@ export const PageLayout = Shade<PageLayoutProps>({
|
|
|
135
141
|
backgroundImage: cssVariableTheme.background.paperImage,
|
|
136
142
|
transition: `transform ${cssVariableTheme.transitions.duration.slow} ${cssVariableTheme.transitions.easing.easeInOut}`,
|
|
137
143
|
},
|
|
138
|
-
'& .page-layout-drawer-left': {
|
|
144
|
+
'& > * > .page-layout-drawer-left': {
|
|
139
145
|
left: '0',
|
|
140
146
|
width: 'var(--layout-drawer-left-configured-width, 240px)',
|
|
141
147
|
borderRight: `1px solid ${cssVariableTheme.divider}`,
|
|
142
148
|
transform: 'translateX(0)',
|
|
143
149
|
},
|
|
144
|
-
'& .page-layout-drawer-right': {
|
|
150
|
+
'& > * > .page-layout-drawer-right': {
|
|
145
151
|
right: '0',
|
|
146
152
|
width: 'var(--layout-drawer-right-configured-width, 240px)',
|
|
147
153
|
borderLeft: `1px solid ${cssVariableTheme.divider}`,
|
|
@@ -149,17 +155,17 @@ export const PageLayout = Shade<PageLayoutProps>({
|
|
|
149
155
|
},
|
|
150
156
|
|
|
151
157
|
// Drawer closed states (controlled via host data attributes)
|
|
152
|
-
'&[data-drawer-left-closed] .page-layout-drawer-left': {
|
|
158
|
+
'&[data-drawer-left-closed] > * > .page-layout-drawer-left': {
|
|
153
159
|
transform: 'translateX(-100%)',
|
|
154
160
|
pointerEvents: 'none',
|
|
155
161
|
},
|
|
156
|
-
'&[data-drawer-right-closed] .page-layout-drawer-right': {
|
|
162
|
+
'&[data-drawer-right-closed] > * > .page-layout-drawer-right': {
|
|
157
163
|
transform: 'translateX(100%)',
|
|
158
164
|
pointerEvents: 'none',
|
|
159
165
|
},
|
|
160
166
|
|
|
161
167
|
// Temporary drawer backdrop
|
|
162
|
-
'& .page-layout-drawer-backdrop': {
|
|
168
|
+
'& > * > .page-layout-drawer-backdrop': {
|
|
163
169
|
position: 'fixed',
|
|
164
170
|
top: '0',
|
|
165
171
|
left: '0',
|
|
@@ -171,13 +177,28 @@ export const PageLayout = Shade<PageLayoutProps>({
|
|
|
171
177
|
pointerEvents: 'none',
|
|
172
178
|
transition: `opacity ${cssVariableTheme.transitions.duration.slow} ${cssVariableTheme.transitions.easing.easeInOut}`,
|
|
173
179
|
},
|
|
174
|
-
'&[data-backdrop-visible] .page-layout-drawer-backdrop': {
|
|
180
|
+
'&[data-backdrop-visible] > * > .page-layout-drawer-backdrop': {
|
|
175
181
|
opacity: '1',
|
|
176
182
|
pointerEvents: 'auto',
|
|
177
183
|
},
|
|
178
184
|
|
|
185
|
+
// Contained mode - use absolute positioning instead of fixed so the layout
|
|
186
|
+
// fills its nearest positioned ancestor rather than the viewport
|
|
187
|
+
'&[data-contained]': {
|
|
188
|
+
position: 'absolute',
|
|
189
|
+
},
|
|
190
|
+
'&[data-contained] > * > .page-layout-appbar': {
|
|
191
|
+
position: 'absolute',
|
|
192
|
+
},
|
|
193
|
+
'&[data-contained] > * > .page-layout-drawer': {
|
|
194
|
+
position: 'absolute',
|
|
195
|
+
},
|
|
196
|
+
'&[data-contained] > * > .page-layout-drawer-backdrop': {
|
|
197
|
+
position: 'absolute',
|
|
198
|
+
},
|
|
199
|
+
|
|
179
200
|
// Content area - uses CSS variables for positioning
|
|
180
|
-
'& .page-layout-content': {
|
|
201
|
+
'& > * > .page-layout-content': {
|
|
181
202
|
position: 'absolute',
|
|
182
203
|
top: '0',
|
|
183
204
|
bottom: '0',
|
|
@@ -327,6 +348,7 @@ export const PageLayout = Shade<PageLayoutProps>({
|
|
|
327
348
|
const rightContentMargin = layoutService.getContentMarginForPosition('right')
|
|
328
349
|
|
|
329
350
|
useHostProps({
|
|
351
|
+
...(props.contained ? { 'data-contained': '' } : {}),
|
|
330
352
|
...(!isLeftOpen ? { 'data-drawer-left-closed': '' } : {}),
|
|
331
353
|
...(!isRightOpen ? { 'data-drawer-right-closed': '' } : {}),
|
|
332
354
|
...(props.appBar?.variant === 'auto-hide' ? { 'data-appbar-auto-hide': '' } : {}),
|
package/src/components/paper.tsx
CHANGED
|
@@ -2,7 +2,7 @@ import { Shade, createComponent } from '@furystack/shades'
|
|
|
2
2
|
import { cssVariableTheme } from '../services/css-variable-theme.js'
|
|
3
3
|
|
|
4
4
|
export const Paper = Shade<{ elevation?: 0 | 1 | 2 | 3 }>({
|
|
5
|
-
|
|
5
|
+
customElementName: 'shade-paper',
|
|
6
6
|
elementBase: HTMLDivElement,
|
|
7
7
|
elementBaseName: 'div',
|
|
8
8
|
css: {
|
|
@@ -15,7 +15,7 @@ describe('Rating', () => {
|
|
|
15
15
|
vi.restoreAllMocks()
|
|
16
16
|
})
|
|
17
17
|
|
|
18
|
-
it('should render
|
|
18
|
+
it('should render as custom element', async () => {
|
|
19
19
|
await usingAsync(new Injector(), async (injector) => {
|
|
20
20
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
21
21
|
|
|
@@ -62,7 +62,7 @@ export type RatingProps = {
|
|
|
62
62
|
* keyboard navigation, and theme integration.
|
|
63
63
|
*/
|
|
64
64
|
export const Rating = Shade<RatingProps>({
|
|
65
|
-
|
|
65
|
+
customElementName: 'shade-rating',
|
|
66
66
|
css: {
|
|
67
67
|
display: 'inline-flex',
|
|
68
68
|
fontFamily: cssVariableTheme.typography.fontFamily,
|
|
@@ -68,7 +68,7 @@ const defaultTitles: Record<ResultStatus, string> = {
|
|
|
68
68
|
* Supports success, error, warning, info statuses and common HTTP error codes (403, 404, 500).
|
|
69
69
|
*/
|
|
70
70
|
export const Result = Shade<ResultProps>({
|
|
71
|
-
|
|
71
|
+
customElementName: 'shade-result',
|
|
72
72
|
css: {
|
|
73
73
|
display: 'flex',
|
|
74
74
|
flexDirection: 'column',
|
|
@@ -10,7 +10,7 @@ export type SkeletonProps = {
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export const Skeleton = Shade<SkeletonProps>({
|
|
13
|
-
|
|
13
|
+
customElementName: 'shade-skeleton',
|
|
14
14
|
render: ({ props, useRef }) => {
|
|
15
15
|
const wrapperRef = useRef<HTMLDivElement>('wrapper')
|
|
16
16
|
const { delay = 1500 } = props
|
|
@@ -68,7 +68,7 @@ describe('Suggest', () => {
|
|
|
68
68
|
})
|
|
69
69
|
|
|
70
70
|
describe('rendering', () => {
|
|
71
|
-
it('should render
|
|
71
|
+
it('should render as custom element', async () => {
|
|
72
72
|
await usingAsync(new Injector(), async (injector) => {
|
|
73
73
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
74
74
|
const onSelectSuggestion = vi.fn()
|
|
@@ -41,7 +41,7 @@ const isSyncProps = (props: SuggestProps<unknown>): props is SuggestSyncProps =>
|
|
|
41
41
|
export const Suggest: <T>(props: SuggestProps<T>, children: ChildrenList) => JSX.Element<any> = Shade<
|
|
42
42
|
SuggestProps<any>
|
|
43
43
|
>({
|
|
44
|
-
|
|
44
|
+
customElementName: 'shade-suggest',
|
|
45
45
|
css: {
|
|
46
46
|
...searchableInputStyles,
|
|
47
47
|
fontFamily: cssVariableTheme.typography.fontFamily,
|
|
@@ -47,7 +47,7 @@ describe('SuggestInput', () => {
|
|
|
47
47
|
return new SuggestManager<TestEntry>(getEntries, getSuggestionEntry)
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
it('should render
|
|
50
|
+
it('should render as custom element', async () => {
|
|
51
51
|
await usingAsync(new Injector(), async (injector) => {
|
|
52
52
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
53
53
|
const manager = createManager()
|
|
@@ -3,7 +3,7 @@ import { cssVariableTheme } from '../../services/css-variable-theme.js'
|
|
|
3
3
|
import type { SuggestManager } from './suggest-manager.js'
|
|
4
4
|
|
|
5
5
|
export const SuggestInput = Shade<{ manager: SuggestManager<any> }>({
|
|
6
|
-
|
|
6
|
+
customElementName: 'shades-suggest-input',
|
|
7
7
|
css: {
|
|
8
8
|
width: '100%',
|
|
9
9
|
fontFamily: cssVariableTheme.typography.fontFamily,
|
|
@@ -55,7 +55,7 @@ describe('SuggestionList', () => {
|
|
|
55
55
|
return new SuggestManager<TestEntry>(getEntries, getSuggestionEntry)
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
it('should render
|
|
58
|
+
it('should render as custom element', async () => {
|
|
59
59
|
await usingAsync(new Injector(), async (injector) => {
|
|
60
60
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
61
61
|
const manager = createManager()
|
|
@@ -6,7 +6,7 @@ import type { SuggestManager } from './suggest-manager.js'
|
|
|
6
6
|
|
|
7
7
|
export const SuggestionList: <T>(props: { manager: SuggestManager<T> }, children: ChildrenList) => JSX.Element<any> =
|
|
8
8
|
Shade<{ manager: SuggestManager<any> }>({
|
|
9
|
-
|
|
9
|
+
customElementName: 'shade-suggest-suggestion-list',
|
|
10
10
|
css: {
|
|
11
11
|
fontFamily: cssVariableTheme.typography.fontFamily,
|
|
12
12
|
'& .suggestion-items-container': {
|
package/src/components/tabs.tsx
CHANGED
|
@@ -13,7 +13,7 @@ export type Tab = {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
const TabHeader = Shade<{ hash: string }>({
|
|
16
|
-
|
|
16
|
+
customElementName: 'shade-tab-header',
|
|
17
17
|
css: {
|
|
18
18
|
padding: `${cssVariableTheme.spacing.md} 40px`,
|
|
19
19
|
cursor: 'pointer',
|
|
@@ -74,7 +74,7 @@ export const Tabs = Shade<{
|
|
|
74
74
|
onAdd?: () => void
|
|
75
75
|
viewTransition?: boolean | ViewTransitionConfig
|
|
76
76
|
}>({
|
|
77
|
-
|
|
77
|
+
customElementName: 'shade-tabs',
|
|
78
78
|
css: {
|
|
79
79
|
fontFamily: cssVariableTheme.typography.fontFamily,
|
|
80
80
|
width: '100%',
|
|
@@ -21,7 +21,7 @@ export type TimelineItemProps = PartialElement<HTMLElement> & {
|
|
|
21
21
|
* Renders a dot, a connector tail, and the item's content (children).
|
|
22
22
|
*/
|
|
23
23
|
export const TimelineItem = Shade<TimelineItemProps>({
|
|
24
|
-
|
|
24
|
+
customElementName: 'shade-timeline-item',
|
|
25
25
|
css: {
|
|
26
26
|
display: 'flex',
|
|
27
27
|
position: 'relative',
|
|
@@ -157,7 +157,7 @@ export type TimelineProps = PartialElement<HTMLElement> & {
|
|
|
157
157
|
* Supports left, right, and alternate layout modes with optional pending state.
|
|
158
158
|
*/
|
|
159
159
|
export const Timeline = Shade<TimelineProps>({
|
|
160
|
-
|
|
160
|
+
customElementName: 'shade-timeline',
|
|
161
161
|
css: {
|
|
162
162
|
display: 'flex',
|
|
163
163
|
flexDirection: 'column',
|
|
@@ -20,7 +20,7 @@ const INDENT_PX = 20
|
|
|
20
20
|
const EXPAND_ICON_WIDTH = 20
|
|
21
21
|
|
|
22
22
|
export const TreeItem: <T>(props: TreeItemProps<T>, children: ChildrenList) => JSX.Element<any> = Shade({
|
|
23
|
-
|
|
23
|
+
customElementName: 'shade-tree-item',
|
|
24
24
|
css: {
|
|
25
25
|
display: 'flex',
|
|
26
26
|
fontFamily: cssVariableTheme.typography.fontFamily,
|
|
@@ -24,7 +24,7 @@ export type TreeProps<T> = {
|
|
|
24
24
|
} & PartialElement<HTMLDivElement>
|
|
25
25
|
|
|
26
26
|
export const Tree: <T>(props: TreeProps<T>, children: ChildrenList) => JSX.Element<any> = Shade({
|
|
27
|
-
|
|
27
|
+
customElementName: 'shade-tree',
|
|
28
28
|
css: {
|
|
29
29
|
display: 'block',
|
|
30
30
|
fontFamily: cssVariableTheme.typography.fontFamily,
|
|
@@ -298,7 +298,7 @@ const shadesByTag = {} as Record<TypographyTag, (props: TypographyProps, childre
|
|
|
298
298
|
|
|
299
299
|
for (const [tag, elementBase] of tagConfigs) {
|
|
300
300
|
shadesByTag[tag] = Shade<TypographyProps>({
|
|
301
|
-
|
|
301
|
+
customElementName: `shade-typography-${tag}`,
|
|
302
302
|
elementBase,
|
|
303
303
|
elementBaseName: tag,
|
|
304
304
|
css: typographyCss,
|
|
@@ -7,7 +7,7 @@ import type { WizardStepProps } from './index.js'
|
|
|
7
7
|
import { Wizard } from './index.js'
|
|
8
8
|
|
|
9
9
|
const Step1 = Shade<WizardStepProps>({
|
|
10
|
-
|
|
10
|
+
customElementName: 'wizard-test-step-1',
|
|
11
11
|
render: ({ props }) => (
|
|
12
12
|
<div className="wizard-step" data-step-name="step1">
|
|
13
13
|
<span className="step-info">
|
|
@@ -25,7 +25,7 @@ const Step1 = Shade<WizardStepProps>({
|
|
|
25
25
|
})
|
|
26
26
|
|
|
27
27
|
const Step2 = Shade<WizardStepProps>({
|
|
28
|
-
|
|
28
|
+
customElementName: 'wizard-test-step-2',
|
|
29
29
|
render: ({ props }) => (
|
|
30
30
|
<div className="wizard-step" data-step-name="step2">
|
|
31
31
|
<span className="step-info">
|
|
@@ -43,7 +43,7 @@ const Step2 = Shade<WizardStepProps>({
|
|
|
43
43
|
})
|
|
44
44
|
|
|
45
45
|
const Step3 = Shade<WizardStepProps>({
|
|
46
|
-
|
|
46
|
+
customElementName: 'wizard-test-step-3',
|
|
47
47
|
render: ({ props }) => (
|
|
48
48
|
<div className="wizard-step" data-step-name="step3">
|
|
49
49
|
<span className="step-info">
|