@furystack/shades-common-components 10.0.35 → 11.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 +66 -0
- package/esm/components/animations.spec.d.ts +2 -0
- package/esm/components/animations.spec.d.ts.map +1 -0
- package/esm/components/animations.spec.js +201 -0
- package/esm/components/animations.spec.js.map +1 -0
- package/esm/components/app-bar-link.js +21 -20
- package/esm/components/app-bar-link.js.map +1 -1
- package/esm/components/app-bar-link.spec.d.ts +2 -0
- package/esm/components/app-bar-link.spec.d.ts.map +1 -0
- package/esm/components/app-bar-link.spec.js +252 -0
- package/esm/components/app-bar-link.spec.js.map +1 -0
- package/esm/components/app-bar.js +21 -21
- package/esm/components/app-bar.js.map +1 -1
- package/esm/components/app-bar.spec.d.ts +2 -0
- package/esm/components/app-bar.spec.d.ts.map +1 -0
- package/esm/components/app-bar.spec.js +117 -0
- package/esm/components/app-bar.spec.js.map +1 -0
- package/esm/components/avatar.d.ts.map +1 -1
- package/esm/components/avatar.js +15 -19
- package/esm/components/avatar.js.map +1 -1
- package/esm/components/avatar.spec.d.ts +2 -0
- package/esm/components/avatar.spec.d.ts.map +1 -0
- package/esm/components/avatar.spec.js +114 -0
- package/esm/components/avatar.spec.js.map +1 -0
- package/esm/components/button.d.ts.map +1 -1
- package/esm/components/button.js +145 -156
- package/esm/components/button.js.map +1 -1
- package/esm/components/button.spec.d.ts +2 -0
- package/esm/components/button.spec.d.ts.map +1 -0
- package/esm/components/button.spec.js +155 -0
- package/esm/components/button.spec.js.map +1 -0
- package/esm/components/command-palette/command-palette-input.d.ts.map +1 -1
- package/esm/components/command-palette/command-palette-input.js +18 -16
- package/esm/components/command-palette/command-palette-input.js.map +1 -1
- package/esm/components/command-palette/command-palette-input.spec.d.ts +2 -0
- package/esm/components/command-palette/command-palette-input.spec.d.ts.map +1 -0
- package/esm/components/command-palette/command-palette-input.spec.js +233 -0
- package/esm/components/command-palette/command-palette-input.spec.js.map +1 -0
- package/esm/components/command-palette/command-palette-manager.spec.d.ts +2 -0
- package/esm/components/command-palette/command-palette-manager.spec.d.ts.map +1 -0
- package/esm/components/command-palette/command-palette-manager.spec.js +362 -0
- package/esm/components/command-palette/command-palette-manager.spec.js.map +1 -0
- package/esm/components/command-palette/command-palette-suggestion-list.d.ts.map +1 -1
- package/esm/components/command-palette/command-palette-suggestion-list.js +42 -46
- package/esm/components/command-palette/command-palette-suggestion-list.js.map +1 -1
- package/esm/components/command-palette/command-palette-suggestion-list.spec.d.ts +2 -0
- package/esm/components/command-palette/command-palette-suggestion-list.spec.d.ts.map +1 -0
- package/esm/components/command-palette/command-palette-suggestion-list.spec.js +376 -0
- package/esm/components/command-palette/command-palette-suggestion-list.spec.js.map +1 -0
- package/esm/components/command-palette/index.d.ts.map +1 -1
- package/esm/components/command-palette/index.js +100 -110
- package/esm/components/command-palette/index.js.map +1 -1
- package/esm/components/command-palette/index.spec.d.ts +2 -0
- package/esm/components/command-palette/index.spec.d.ts.map +1 -0
- package/esm/components/command-palette/index.spec.js +509 -0
- package/esm/components/command-palette/index.spec.js.map +1 -0
- package/esm/components/data-grid/body.js +1 -1
- package/esm/components/data-grid/body.js.map +1 -1
- package/esm/components/data-grid/body.spec.d.ts +2 -0
- package/esm/components/data-grid/body.spec.d.ts.map +1 -0
- package/esm/components/data-grid/body.spec.js +228 -0
- package/esm/components/data-grid/body.spec.js.map +1 -0
- package/esm/components/data-grid/data-grid-row.d.ts.map +1 -1
- package/esm/components/data-grid/data-grid-row.js +49 -73
- package/esm/components/data-grid/data-grid-row.js.map +1 -1
- package/esm/components/data-grid/data-grid-row.spec.d.ts +2 -0
- package/esm/components/data-grid/data-grid-row.spec.d.ts.map +1 -0
- package/esm/components/data-grid/data-grid-row.spec.js +296 -0
- package/esm/components/data-grid/data-grid-row.spec.js.map +1 -0
- package/esm/components/data-grid/data-grid.d.ts.map +1 -1
- package/esm/components/data-grid/data-grid.js +35 -28
- package/esm/components/data-grid/data-grid.js.map +1 -1
- package/esm/components/data-grid/data-grid.spec.d.ts +2 -0
- package/esm/components/data-grid/data-grid.spec.d.ts.map +1 -0
- package/esm/components/data-grid/data-grid.spec.js +544 -0
- package/esm/components/data-grid/data-grid.spec.js.map +1 -0
- package/esm/components/data-grid/footer.js +21 -15
- package/esm/components/data-grid/footer.js.map +1 -1
- package/esm/components/data-grid/footer.spec.d.ts +2 -0
- package/esm/components/data-grid/footer.spec.d.ts.map +1 -0
- package/esm/components/data-grid/footer.spec.js +264 -0
- package/esm/components/data-grid/footer.spec.js.map +1 -0
- package/esm/components/data-grid/header.d.ts.map +1 -1
- package/esm/components/data-grid/header.js +55 -33
- package/esm/components/data-grid/header.js.map +1 -1
- package/esm/components/data-grid/header.spec.d.ts +2 -0
- package/esm/components/data-grid/header.spec.d.ts.map +1 -0
- package/esm/components/data-grid/header.spec.js +421 -0
- package/esm/components/data-grid/header.spec.js.map +1 -0
- package/esm/components/data-grid/selection-cell.d.ts.map +1 -1
- package/esm/components/data-grid/selection-cell.js +13 -6
- package/esm/components/data-grid/selection-cell.js.map +1 -1
- package/esm/components/data-grid/selection-cell.spec.d.ts +2 -0
- package/esm/components/data-grid/selection-cell.spec.d.ts.map +1 -0
- package/esm/components/data-grid/selection-cell.spec.js +118 -0
- package/esm/components/data-grid/selection-cell.spec.js.map +1 -0
- package/esm/components/fab.d.ts.map +1 -1
- package/esm/components/fab.js +10 -1
- package/esm/components/fab.js.map +1 -1
- package/esm/components/fab.spec.d.ts +2 -0
- package/esm/components/fab.spec.d.ts.map +1 -0
- package/esm/components/fab.spec.js +95 -0
- package/esm/components/fab.spec.js.map +1 -0
- package/esm/components/form.spec.d.ts +2 -0
- package/esm/components/form.spec.d.ts.map +1 -0
- package/esm/components/form.spec.js +314 -0
- package/esm/components/form.spec.js.map +1 -0
- package/esm/components/grid.d.ts.map +1 -1
- package/esm/components/grid.js +40 -37
- package/esm/components/grid.js.map +1 -1
- package/esm/components/grid.spec.d.ts +2 -0
- package/esm/components/grid.spec.d.ts.map +1 -0
- package/esm/components/grid.spec.js +316 -0
- package/esm/components/grid.spec.js.map +1 -0
- package/esm/components/inputs/autocomplete.spec.d.ts +2 -0
- package/esm/components/inputs/autocomplete.spec.d.ts.map +1 -0
- package/esm/components/inputs/autocomplete.spec.js +194 -0
- package/esm/components/inputs/autocomplete.spec.js.map +1 -0
- package/esm/components/inputs/input.d.ts.map +1 -1
- package/esm/components/inputs/input.js +141 -109
- package/esm/components/inputs/input.js.map +1 -1
- package/esm/components/inputs/input.spec.d.ts +2 -0
- package/esm/components/inputs/input.spec.d.ts.map +1 -0
- package/esm/components/inputs/input.spec.js +577 -0
- package/esm/components/inputs/input.spec.js.map +1 -0
- package/esm/components/inputs/text-area.d.ts.map +1 -1
- package/esm/components/inputs/text-area.js +54 -58
- package/esm/components/inputs/text-area.js.map +1 -1
- package/esm/components/inputs/text-area.spec.d.ts +2 -0
- package/esm/components/inputs/text-area.spec.d.ts.map +1 -0
- package/esm/components/inputs/text-area.spec.js +214 -0
- package/esm/components/inputs/text-area.spec.js.map +1 -0
- package/esm/components/loader.js +1 -1
- package/esm/components/loader.js.map +1 -1
- package/esm/components/loader.spec.d.ts +2 -0
- package/esm/components/loader.spec.d.ts.map +1 -0
- package/esm/components/loader.spec.js +251 -0
- package/esm/components/loader.spec.js.map +1 -0
- package/esm/components/modal.d.ts.map +1 -1
- package/esm/components/modal.js +11 -9
- package/esm/components/modal.js.map +1 -1
- package/esm/components/modal.spec.d.ts +2 -0
- package/esm/components/modal.spec.d.ts.map +1 -0
- package/esm/components/modal.spec.js +227 -0
- package/esm/components/modal.spec.js.map +1 -0
- package/esm/components/noty-list.d.ts.map +1 -1
- package/esm/components/noty-list.js +39 -40
- package/esm/components/noty-list.js.map +1 -1
- package/esm/components/noty-list.spec.d.ts +2 -0
- package/esm/components/noty-list.spec.d.ts.map +1 -0
- package/esm/components/noty-list.spec.js +486 -0
- package/esm/components/noty-list.spec.js.map +1 -0
- package/esm/components/paper.d.ts.map +1 -1
- package/esm/components/paper.js +15 -12
- package/esm/components/paper.js.map +1 -1
- package/esm/components/paper.spec.d.ts +2 -0
- package/esm/components/paper.spec.d.ts.map +1 -0
- package/esm/components/paper.spec.js +63 -0
- package/esm/components/paper.spec.js.map +1 -0
- package/esm/components/skeleton.js +1 -1
- package/esm/components/skeleton.js.map +1 -1
- package/esm/components/skeleton.spec.d.ts +2 -0
- package/esm/components/skeleton.spec.d.ts.map +1 -0
- package/esm/components/skeleton.spec.js +159 -0
- package/esm/components/skeleton.spec.js.map +1 -0
- package/esm/components/styles.spec.d.ts +2 -0
- package/esm/components/styles.spec.d.ts.map +1 -0
- package/esm/components/styles.spec.js +56 -0
- package/esm/components/styles.spec.js.map +1 -0
- package/esm/components/suggest/index.d.ts.map +1 -1
- package/esm/components/suggest/index.js +74 -83
- package/esm/components/suggest/index.js.map +1 -1
- package/esm/components/suggest/index.spec.d.ts +2 -0
- package/esm/components/suggest/index.spec.d.ts.map +1 -0
- package/esm/components/suggest/index.spec.js +515 -0
- package/esm/components/suggest/index.spec.js.map +1 -0
- package/esm/components/suggest/suggest-input.d.ts.map +1 -1
- package/esm/components/suggest/suggest-input.js +16 -17
- package/esm/components/suggest/suggest-input.js.map +1 -1
- package/esm/components/suggest/suggest-input.spec.d.ts +2 -0
- package/esm/components/suggest/suggest-input.spec.d.ts.map +1 -0
- package/esm/components/suggest/suggest-input.spec.js +138 -0
- package/esm/components/suggest/suggest-input.spec.js.map +1 -0
- package/esm/components/suggest/suggest-manager.spec.d.ts +2 -0
- package/esm/components/suggest/suggest-manager.spec.d.ts.map +1 -0
- package/esm/components/suggest/suggest-manager.spec.js +308 -0
- package/esm/components/suggest/suggest-manager.spec.js.map +1 -0
- package/esm/components/suggest/suggestion-list.d.ts.map +1 -1
- package/esm/components/suggest/suggestion-list.js +43 -48
- package/esm/components/suggest/suggestion-list.js.map +1 -1
- package/esm/components/suggest/suggestion-list.spec.d.ts +2 -0
- package/esm/components/suggest/suggestion-list.spec.d.ts.map +1 -0
- package/esm/components/suggest/suggestion-list.spec.js +252 -0
- package/esm/components/suggest/suggestion-list.spec.js.map +1 -0
- package/esm/components/tabs.d.ts.map +1 -1
- package/esm/components/tabs.js +32 -18
- package/esm/components/tabs.js.map +1 -1
- package/esm/components/tabs.spec.d.ts +2 -0
- package/esm/components/tabs.spec.d.ts.map +1 -0
- package/esm/components/tabs.spec.js +187 -0
- package/esm/components/tabs.spec.js.map +1 -0
- package/esm/components/wizard/index.d.ts.map +1 -1
- package/esm/components/wizard/index.js +10 -7
- package/esm/components/wizard/index.js.map +1 -1
- package/esm/components/wizard/index.spec.d.ts +2 -0
- package/esm/components/wizard/index.spec.d.ts.map +1 -0
- package/esm/components/wizard/index.spec.js +171 -0
- package/esm/components/wizard/index.spec.js.map +1 -0
- package/esm/services/collection-service.spec.js +391 -2
- package/esm/services/collection-service.spec.js.map +1 -1
- package/esm/services/css-variable-theme.d.ts.map +1 -1
- package/esm/services/css-variable-theme.js +21 -1
- package/esm/services/css-variable-theme.js.map +1 -1
- package/esm/services/css-variable-theme.spec.d.ts +2 -0
- package/esm/services/css-variable-theme.spec.d.ts.map +1 -0
- package/esm/services/css-variable-theme.spec.js +169 -0
- package/esm/services/css-variable-theme.spec.js.map +1 -0
- package/esm/services/default-palette.d.ts +4 -0
- package/esm/services/default-palette.d.ts.map +1 -1
- package/esm/services/default-palette.js +22 -0
- package/esm/services/default-palette.js.map +1 -1
- package/esm/services/theme-provider-service.d.ts +59 -1
- package/esm/services/theme-provider-service.d.ts.map +1 -1
- package/esm/services/theme-provider-service.js.map +1 -1
- package/esm/services/theme-provider-service.spec.d.ts +2 -0
- package/esm/services/theme-provider-service.spec.d.ts.map +1 -0
- package/esm/services/theme-provider-service.spec.js +166 -0
- package/esm/services/theme-provider-service.spec.js.map +1 -0
- package/package.json +2 -2
- package/src/components/animations.spec.ts +299 -0
- package/src/components/app-bar-link.spec.tsx +341 -0
- package/src/components/app-bar-link.tsx +21 -21
- package/src/components/app-bar.spec.tsx +142 -0
- package/src/components/app-bar.tsx +22 -22
- package/src/components/avatar.spec.tsx +146 -0
- package/src/components/avatar.tsx +17 -20
- package/src/components/button.spec.tsx +193 -0
- package/src/components/button.tsx +162 -197
- package/src/components/command-palette/command-palette-input.spec.tsx +320 -0
- package/src/components/command-palette/command-palette-input.tsx +19 -22
- package/src/components/command-palette/command-palette-manager.spec.ts +470 -0
- package/src/components/command-palette/command-palette-suggestion-list.spec.tsx +499 -0
- package/src/components/command-palette/command-palette-suggestion-list.tsx +42 -46
- package/src/components/command-palette/index.spec.tsx +684 -0
- package/src/components/command-palette/index.tsx +107 -136
- package/src/components/data-grid/body.spec.tsx +340 -0
- package/src/components/data-grid/body.tsx +1 -1
- package/src/components/data-grid/data-grid-row.spec.tsx +382 -0
- package/src/components/data-grid/data-grid-row.tsx +50 -82
- package/src/components/data-grid/data-grid.spec.tsx +939 -0
- package/src/components/data-grid/data-grid.tsx +38 -35
- package/src/components/data-grid/footer.spec.tsx +344 -0
- package/src/components/data-grid/footer.tsx +19 -19
- package/src/components/data-grid/header.spec.tsx +563 -0
- package/src/components/data-grid/header.tsx +53 -44
- package/src/components/data-grid/selection-cell.spec.tsx +150 -0
- package/src/components/data-grid/selection-cell.tsx +12 -6
- package/src/components/fab.spec.tsx +108 -0
- package/src/components/fab.tsx +10 -1
- package/src/components/form.spec.tsx +481 -0
- package/src/components/grid.spec.tsx +334 -0
- package/src/components/grid.tsx +57 -63
- package/src/components/inputs/autocomplete.spec.tsx +258 -0
- package/src/components/inputs/input.spec.tsx +808 -0
- package/src/components/inputs/input.tsx +153 -139
- package/src/components/inputs/text-area.spec.tsx +285 -0
- package/src/components/inputs/text-area.tsx +53 -79
- package/src/components/loader.spec.tsx +346 -0
- package/src/components/loader.tsx +1 -1
- package/src/components/modal.spec.tsx +304 -0
- package/src/components/modal.tsx +11 -9
- package/src/components/noty-list.spec.tsx +631 -0
- package/src/components/noty-list.tsx +39 -50
- package/src/components/paper.spec.tsx +72 -0
- package/src/components/paper.tsx +15 -13
- package/src/components/skeleton.spec.tsx +219 -0
- package/src/components/skeleton.tsx +1 -1
- package/src/components/styles.spec.ts +70 -0
- package/src/components/suggest/index.spec.tsx +861 -0
- package/src/components/suggest/index.tsx +74 -101
- package/src/components/suggest/suggest-input.spec.tsx +181 -0
- package/src/components/suggest/suggest-input.tsx +16 -24
- package/src/components/suggest/suggest-manager.spec.ts +409 -0
- package/src/components/suggest/suggestion-list.spec.tsx +334 -0
- package/src/components/suggest/suggestion-list.tsx +43 -48
- package/src/components/tabs.spec.tsx +236 -0
- package/src/components/tabs.tsx +33 -21
- package/src/components/wizard/index.spec.tsx +224 -0
- package/src/components/wizard/index.tsx +10 -9
- package/src/services/collection-service.spec.ts +492 -3
- package/src/services/css-variable-theme.spec.ts +204 -0
- package/src/services/css-variable-theme.ts +21 -1
- package/src/services/default-palette.ts +22 -0
- package/src/services/theme-provider-service.spec.ts +195 -0
- package/src/services/theme-provider-service.ts +60 -2
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
import { Shade, createComponent
|
|
2
|
-
import {
|
|
1
|
+
import { Shade, createComponent } from '@furystack/shades';
|
|
2
|
+
import { cssVariableTheme } from '../services/css-variable-theme.js';
|
|
3
3
|
export const AppBar = Shade({
|
|
4
4
|
shadowDomName: 'shade-app-bar',
|
|
5
|
+
css: {
|
|
6
|
+
width: '100%',
|
|
7
|
+
background: 'rgba(128,128,128,0.2)',
|
|
8
|
+
backdropFilter: 'blur(15px)',
|
|
9
|
+
display: 'flex',
|
|
10
|
+
justifyContent: 'flex-start',
|
|
11
|
+
alignItems: 'center',
|
|
12
|
+
boxShadow: '0 0 12px rgba(0,0,0,0.6)',
|
|
13
|
+
transition: 'opacity .35s cubic-bezier(0.550, 0.085, 0.680, 0.530), padding .2s cubic-bezier(0.550, 0.085, 0.680, 0.530)',
|
|
14
|
+
opacity: '0',
|
|
15
|
+
position: 'fixed',
|
|
16
|
+
zIndex: '1',
|
|
17
|
+
color: cssVariableTheme.text.secondary,
|
|
18
|
+
'&.visible': {
|
|
19
|
+
opacity: '1',
|
|
20
|
+
},
|
|
21
|
+
},
|
|
5
22
|
constructed: ({ element }) => {
|
|
6
23
|
requestAnimationFrame(() => {
|
|
7
|
-
element.
|
|
24
|
+
element.classList.add('visible');
|
|
8
25
|
});
|
|
9
26
|
},
|
|
10
|
-
render: ({ children
|
|
11
|
-
const { theme } = injector.getInstance(ThemeProviderService);
|
|
12
|
-
attachProps(element, {
|
|
13
|
-
style: {
|
|
14
|
-
width: '100%',
|
|
15
|
-
background: 'rgba(128,128,128,0.2)',
|
|
16
|
-
backdropFilter: 'blur(15px)',
|
|
17
|
-
display: 'flex',
|
|
18
|
-
justifyContent: 'flex-start',
|
|
19
|
-
alignItems: 'center',
|
|
20
|
-
boxShadow: '0 0 12px rgba(0,0,0,0.6)',
|
|
21
|
-
transition: 'opacity .35s cubic-bezier(0.550, 0.085, 0.680, 0.530), padding .2s cubic-bezier(0.550, 0.085, 0.680, 0.530)',
|
|
22
|
-
opacity: '0',
|
|
23
|
-
position: 'fixed',
|
|
24
|
-
zIndex: '1',
|
|
25
|
-
color: theme.text.secondary,
|
|
26
|
-
},
|
|
27
|
-
});
|
|
27
|
+
render: ({ children }) => {
|
|
28
28
|
return createComponent(createComponent, null, children);
|
|
29
29
|
},
|
|
30
30
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-bar.js","sourceRoot":"","sources":["../../src/components/app-bar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"app-bar.js","sourceRoot":"","sources":["../../src/components/app-bar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AAEpE,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC;IAC1B,aAAa,EAAE,eAAe;IAC9B,GAAG,EAAE;QACH,KAAK,EAAE,MAAM;QACb,UAAU,EAAE,uBAAuB;QACnC,cAAc,EAAE,YAAY;QAC5B,OAAO,EAAE,MAAM;QACf,cAAc,EAAE,YAAY;QAC5B,UAAU,EAAE,QAAQ;QACpB,SAAS,EAAE,0BAA0B;QACrC,UAAU,EACR,6GAA6G;QAC/G,OAAO,EAAE,GAAG;QACZ,QAAQ,EAAE,OAAO;QACjB,MAAM,EAAE,GAAG;QACX,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,SAAS;QACtC,WAAW,EAAE;YACX,OAAO,EAAE,GAAG;SACb;KACF;IACD,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;QAC3B,qBAAqB,CAAC,GAAG,EAAE;YACzB,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;IACJ,CAAC;IACD,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;QACvB,OAAO,uCAAG,QAAQ,CAAI,CAAA;IACxB,CAAC;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-bar.spec.d.ts","sourceRoot":"","sources":["../../src/components/app-bar.spec.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { Injector } from '@furystack/inject';
|
|
2
|
+
import { createComponent, initializeShadeRoot } from '@furystack/shades';
|
|
3
|
+
import { sleepAsync } from '@furystack/utils';
|
|
4
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
5
|
+
import { AppBar } from './app-bar.js';
|
|
6
|
+
describe('AppBar component', () => {
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
document.body.innerHTML = '<div id="root"></div>';
|
|
9
|
+
});
|
|
10
|
+
afterEach(() => {
|
|
11
|
+
document.body.innerHTML = '';
|
|
12
|
+
});
|
|
13
|
+
const renderAppBar = async (children) => {
|
|
14
|
+
const injector = new Injector();
|
|
15
|
+
const rootElement = document.getElementById('root');
|
|
16
|
+
initializeShadeRoot({
|
|
17
|
+
injector,
|
|
18
|
+
rootElement,
|
|
19
|
+
jsxElement: createComponent(AppBar, null, children),
|
|
20
|
+
});
|
|
21
|
+
await sleepAsync(50);
|
|
22
|
+
return {
|
|
23
|
+
injector,
|
|
24
|
+
appBar: document.querySelector('shade-app-bar'),
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
describe('rendering', () => {
|
|
28
|
+
it('should render the shade-app-bar custom element', async () => {
|
|
29
|
+
const { appBar } = await renderAppBar(createComponent("span", null, "Content"));
|
|
30
|
+
expect(appBar).not.toBeNull();
|
|
31
|
+
expect(appBar.tagName.toLowerCase()).toBe('shade-app-bar');
|
|
32
|
+
});
|
|
33
|
+
it('should render children in shadow DOM', async () => {
|
|
34
|
+
const { appBar } = await renderAppBar(createComponent("span", { id: "child-content" }, "Test Content"));
|
|
35
|
+
// Children are rendered inside shadow DOM - verify via the element itself
|
|
36
|
+
expect(appBar).not.toBeNull();
|
|
37
|
+
});
|
|
38
|
+
it('should render multiple children', async () => {
|
|
39
|
+
const injector = new Injector();
|
|
40
|
+
const rootElement = document.getElementById('root');
|
|
41
|
+
initializeShadeRoot({
|
|
42
|
+
injector,
|
|
43
|
+
rootElement,
|
|
44
|
+
jsxElement: (createComponent(AppBar, null,
|
|
45
|
+
createComponent("span", { id: "logo" }, "Logo"),
|
|
46
|
+
createComponent("nav", { id: "navigation" }, "Nav"),
|
|
47
|
+
createComponent("button", { id: "action" }, "Action"))),
|
|
48
|
+
});
|
|
49
|
+
await sleepAsync(50);
|
|
50
|
+
const appBar = document.querySelector('shade-app-bar');
|
|
51
|
+
expect(appBar).not.toBeNull();
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
describe('positioning', () => {
|
|
55
|
+
it('should have fixed positioning', async () => {
|
|
56
|
+
const { appBar } = await renderAppBar(createComponent("span", null, "Content"));
|
|
57
|
+
const computedStyle = window.getComputedStyle(appBar);
|
|
58
|
+
expect(computedStyle.position).toBe('fixed');
|
|
59
|
+
});
|
|
60
|
+
it('should have z-index of 1', async () => {
|
|
61
|
+
const { appBar } = await renderAppBar(createComponent("span", null, "Content"));
|
|
62
|
+
const computedStyle = window.getComputedStyle(appBar);
|
|
63
|
+
expect(computedStyle.zIndex).toBe('1');
|
|
64
|
+
});
|
|
65
|
+
it('should have full width', async () => {
|
|
66
|
+
const { appBar } = await renderAppBar(createComponent("span", null, "Content"));
|
|
67
|
+
const computedStyle = window.getComputedStyle(appBar);
|
|
68
|
+
expect(computedStyle.width).toBe('100%');
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
describe('fade-in animation', () => {
|
|
72
|
+
it('should add visible class after construction', async () => {
|
|
73
|
+
const { appBar } = await renderAppBar(createComponent("span", null, "Content"));
|
|
74
|
+
expect(appBar.classList.contains('visible')).toBe(true);
|
|
75
|
+
});
|
|
76
|
+
it('should have opacity 1 when visible class is applied', async () => {
|
|
77
|
+
const { appBar } = await renderAppBar(createComponent("span", null, "Content"));
|
|
78
|
+
const computedStyle = window.getComputedStyle(appBar);
|
|
79
|
+
expect(computedStyle.opacity).toBe('1');
|
|
80
|
+
});
|
|
81
|
+
it('should have transition styles for animation', async () => {
|
|
82
|
+
const { appBar } = await renderAppBar(createComponent("span", null, "Content"));
|
|
83
|
+
const computedStyle = window.getComputedStyle(appBar);
|
|
84
|
+
expect(computedStyle.transition).toContain('opacity');
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe('layout', () => {
|
|
88
|
+
it('should have flex display', async () => {
|
|
89
|
+
const { appBar } = await renderAppBar(createComponent("span", null, "Content"));
|
|
90
|
+
const computedStyle = window.getComputedStyle(appBar);
|
|
91
|
+
expect(computedStyle.display).toBe('flex');
|
|
92
|
+
});
|
|
93
|
+
it('should align items center', async () => {
|
|
94
|
+
const { appBar } = await renderAppBar(createComponent("span", null, "Content"));
|
|
95
|
+
const computedStyle = window.getComputedStyle(appBar);
|
|
96
|
+
expect(computedStyle.alignItems).toBe('center');
|
|
97
|
+
});
|
|
98
|
+
it('should justify content to flex-start', async () => {
|
|
99
|
+
const { appBar } = await renderAppBar(createComponent("span", null, "Content"));
|
|
100
|
+
const computedStyle = window.getComputedStyle(appBar);
|
|
101
|
+
expect(computedStyle.justifyContent).toBe('flex-start');
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
describe('styling', () => {
|
|
105
|
+
it('should have box shadow', async () => {
|
|
106
|
+
const { appBar } = await renderAppBar(createComponent("span", null, "Content"));
|
|
107
|
+
const computedStyle = window.getComputedStyle(appBar);
|
|
108
|
+
expect(computedStyle.boxShadow).not.toBe('none');
|
|
109
|
+
});
|
|
110
|
+
it('should have semi-transparent background', async () => {
|
|
111
|
+
const { appBar } = await renderAppBar(createComponent("span", null, "Content"));
|
|
112
|
+
const computedStyle = window.getComputedStyle(appBar);
|
|
113
|
+
expect(computedStyle.background).toContain('rgba');
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
//# sourceMappingURL=app-bar.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-bar.spec.js","sourceRoot":"","sources":["../../src/components/app-bar.spec.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../src/components/avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAGvD,MAAM,MAAM,WAAW,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;CAAE,GAAG,cAAc,CAAC,cAAc,CAAC,CAAA;AAExG,eAAO,MAAM,MAAM;eAFoB,MAAM;eAAa,GAAG,CAAC,OAAO;;;
|
|
1
|
+
{"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../src/components/avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAGvD,MAAM,MAAM,WAAW,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;CAAE,GAAG,cAAc,CAAC,cAAc,CAAC,CAAA;AAExG,eAAO,MAAM,MAAM;eAFoB,MAAM;eAAa,GAAG,CAAC,OAAO;;;4GA8EnE,CAAA"}
|
package/esm/components/avatar.js
CHANGED
|
@@ -1,32 +1,28 @@
|
|
|
1
1
|
import { Shade, attachProps, createComponent } from '@furystack/shades';
|
|
2
2
|
export const Avatar = Shade({
|
|
3
3
|
shadowDomName: 'shade-avatar',
|
|
4
|
+
css: {
|
|
5
|
+
width: '128px',
|
|
6
|
+
height: '128px',
|
|
7
|
+
overflow: 'hidden',
|
|
8
|
+
borderRadius: '50%',
|
|
9
|
+
boxShadow: '0 0 0 3px rgba(255, 255, 255, 0.1), 0 4px 6px -1px rgba(0, 0, 0, 0.15), 0 2px 4px -1px rgba(0, 0, 0, 0.1)',
|
|
10
|
+
backgroundColor: 'linear-gradient(135deg, rgba(99, 102, 241, 0.1) 0%, rgba(168, 85, 247, 0.1) 100%)',
|
|
11
|
+
display: 'flex',
|
|
12
|
+
position: 'relative',
|
|
13
|
+
transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',
|
|
14
|
+
'&:hover': {
|
|
15
|
+
transform: 'translateY(-2px) scale(1.02)',
|
|
16
|
+
boxShadow: '0 0 0 3px rgba(255, 255, 255, 0.15), 0 10px 15px -3px rgba(0, 0, 0, 0.2), 0 4px 6px -2px rgba(0, 0, 0, 0.1)',
|
|
17
|
+
},
|
|
18
|
+
},
|
|
4
19
|
render: ({ props, element }) => {
|
|
5
20
|
const { avatarUrl, ...containerProps } = props;
|
|
6
21
|
attachProps(element, {
|
|
7
22
|
...containerProps,
|
|
8
23
|
style: {
|
|
9
|
-
width: '128px',
|
|
10
|
-
height: '128px',
|
|
11
|
-
overflow: 'hidden',
|
|
12
|
-
borderRadius: '50%',
|
|
13
|
-
boxShadow: '0 0 0 3px rgba(255, 255, 255, 0.1), 0 4px 6px -1px rgba(0, 0, 0, 0.15), 0 2px 4px -1px rgba(0, 0, 0, 0.1)',
|
|
14
|
-
backgroundColor: 'linear-gradient(135deg, rgba(99, 102, 241, 0.1) 0%, rgba(168, 85, 247, 0.1) 100%)',
|
|
15
|
-
display: 'flex',
|
|
16
|
-
position: 'relative',
|
|
17
|
-
transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',
|
|
18
24
|
...containerProps?.style,
|
|
19
25
|
},
|
|
20
|
-
onmouseenter: () => {
|
|
21
|
-
element.style.transform = 'translateY(-2px) scale(1.02)';
|
|
22
|
-
element.style.boxShadow =
|
|
23
|
-
'0 0 0 3px rgba(255, 255, 255, 0.15), 0 10px 15px -3px rgba(0, 0, 0, 0.2), 0 4px 6px -2px rgba(0, 0, 0, 0.1)';
|
|
24
|
-
},
|
|
25
|
-
onmouseleave: () => {
|
|
26
|
-
element.style.transform = 'translateY(0) scale(1)';
|
|
27
|
-
element.style.boxShadow =
|
|
28
|
-
'0 0 0 3px rgba(255, 255, 255, 0.1), 0 4px 6px -1px rgba(0, 0, 0, 0.15), 0 2px 4px -1px rgba(0, 0, 0, 0.1)';
|
|
29
|
-
},
|
|
30
26
|
});
|
|
31
27
|
return (createComponent("img", { style: {
|
|
32
28
|
width: '100%',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avatar.js","sourceRoot":"","sources":["../../src/components/avatar.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAIvE,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAc;IACvC,aAAa,EAAE,cAAc;IAC7B,
|
|
1
|
+
{"version":3,"file":"avatar.js","sourceRoot":"","sources":["../../src/components/avatar.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAIvE,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAc;IACvC,aAAa,EAAE,cAAc;IAC7B,GAAG,EAAE;QACH,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,KAAK;QACnB,SAAS,EACP,2GAA2G;QAC7G,eAAe,EAAE,mFAAmF;QACpG,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,UAAU;QACpB,UAAU,EAAE,uCAAuC;QACnD,SAAS,EAAE;YACT,SAAS,EAAE,8BAA8B;YACzC,SAAS,EACP,6GAA6G;SAChH;KACF;IACD,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;QAC7B,MAAM,EAAE,SAAS,EAAE,GAAG,cAAc,EAAE,GAAG,KAAK,CAAA;QAE9C,WAAW,CAAC,OAAO,EAAE;YACnB,GAAG,cAAc;YACjB,KAAK,EAAE;gBACL,GAAG,cAAc,EAAE,KAAK;aACzB;SACF,CAAC,CAAA;QAEF,OAAO,CACL,yBACE,KAAK,EAAE;gBACL,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,MAAM;gBACd,SAAS,EAAE,OAAO;gBAClB,cAAc,EAAE,QAAQ;gBACxB,UAAU,EAAE,eAAe;aAC5B,EACD,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,KAAK,CAAC,SAAS,EACpB,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE;gBACd,CAAC;gBAAE,EAAY,CAAC,MAA2B,CAAC,WAAW,CACrD,yBACE,KAAK,EAAE;wBACL,OAAO,EAAE,MAAM;wBACf,UAAU,EAAE,QAAQ;wBACpB,cAAc,EAAE,QAAQ;wBACxB,MAAM,EAAE,MAAM;wBACd,KAAK,EAAE,MAAM;wBACb,UAAU,EAAE,mFAAmF;qBAChG;oBAED,yBACE,KAAK,EAAE;4BACL,OAAO,EAAE,MAAM;4BACf,UAAU,EAAE,QAAQ;4BACpB,cAAc,EAAE,QAAQ;4BACxB,KAAK,EAAE,MAAM;4BACb,MAAM,EAAE,MAAM;4BACd,YAAY,EAAE,KAAK;4BACnB,UAAU,EAAE,0BAA0B;4BACtC,cAAc,EAAE,YAAY;4BAC5B,SAAS,EAAE,QAAQ;4BACnB,UAAU,EAAE,MAAM;4BAClB,QAAQ,EAAE,MAAM;4BAChB,UAAU,EAAE,GAAG;yBAChB,IAEA,KAAK,CAAC,QAAQ,IAAI,IAAI,CACnB,CACF,CACP,CAAA;YACH,CAAC,GACD,CACH,CAAA;IACH,CAAC;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar.spec.d.ts","sourceRoot":"","sources":["../../src/components/avatar.spec.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { Injector } from '@furystack/inject';
|
|
2
|
+
import { createComponent, initializeShadeRoot } from '@furystack/shades';
|
|
3
|
+
import { sleepAsync, usingAsync } from '@furystack/utils';
|
|
4
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
5
|
+
import { Avatar } from './avatar.js';
|
|
6
|
+
describe('Avatar component', () => {
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
document.body.innerHTML = '<div id="root"></div>';
|
|
9
|
+
});
|
|
10
|
+
afterEach(() => {
|
|
11
|
+
document.body.innerHTML = '';
|
|
12
|
+
});
|
|
13
|
+
it('should render an image with the provided avatarUrl', async () => {
|
|
14
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
15
|
+
const rootElement = document.getElementById('root');
|
|
16
|
+
const testUrl = 'https://example.com/avatar.png';
|
|
17
|
+
initializeShadeRoot({
|
|
18
|
+
injector,
|
|
19
|
+
rootElement,
|
|
20
|
+
jsxElement: createComponent(Avatar, { avatarUrl: testUrl }),
|
|
21
|
+
});
|
|
22
|
+
await sleepAsync(50);
|
|
23
|
+
const avatar = document.querySelector('shade-avatar');
|
|
24
|
+
expect(avatar).not.toBeNull();
|
|
25
|
+
const img = avatar?.querySelector('img');
|
|
26
|
+
expect(img).not.toBeNull();
|
|
27
|
+
expect(img?.src).toBe(testUrl);
|
|
28
|
+
expect(img?.alt).toBe('avatar image');
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
it('should display default fallback emoji when image fails to load', async () => {
|
|
32
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
33
|
+
const rootElement = document.getElementById('root');
|
|
34
|
+
initializeShadeRoot({
|
|
35
|
+
injector,
|
|
36
|
+
rootElement,
|
|
37
|
+
jsxElement: createComponent(Avatar, { avatarUrl: "invalid-url" }),
|
|
38
|
+
});
|
|
39
|
+
await sleepAsync(50);
|
|
40
|
+
const avatar = document.querySelector('shade-avatar');
|
|
41
|
+
expect(avatar).not.toBeNull();
|
|
42
|
+
const img = avatar?.querySelector('img');
|
|
43
|
+
expect(img).not.toBeNull();
|
|
44
|
+
// Trigger the error event
|
|
45
|
+
const errorEvent = new Event('error');
|
|
46
|
+
img?.dispatchEvent(errorEvent);
|
|
47
|
+
await sleepAsync(50);
|
|
48
|
+
// After error, img should be replaced with fallback div
|
|
49
|
+
const fallbackImg = avatar?.querySelector('img');
|
|
50
|
+
expect(fallbackImg).toBeNull();
|
|
51
|
+
// The fallback div should contain the default emoji
|
|
52
|
+
const fallbackContent = avatar?.textContent;
|
|
53
|
+
expect(fallbackContent).toContain('🛑');
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
it('should display custom fallback when image fails to load and fallback prop is provided', async () => {
|
|
57
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
58
|
+
const rootElement = document.getElementById('root');
|
|
59
|
+
const customFallback = createComponent("span", { "data-testid": "custom-fallback" }, "AB");
|
|
60
|
+
initializeShadeRoot({
|
|
61
|
+
injector,
|
|
62
|
+
rootElement,
|
|
63
|
+
jsxElement: createComponent(Avatar, { avatarUrl: "invalid-url", fallback: customFallback }),
|
|
64
|
+
});
|
|
65
|
+
await sleepAsync(50);
|
|
66
|
+
const avatar = document.querySelector('shade-avatar');
|
|
67
|
+
expect(avatar).not.toBeNull();
|
|
68
|
+
const img = avatar?.querySelector('img');
|
|
69
|
+
expect(img).not.toBeNull();
|
|
70
|
+
// Trigger the error event
|
|
71
|
+
const errorEvent = new Event('error');
|
|
72
|
+
img?.dispatchEvent(errorEvent);
|
|
73
|
+
await sleepAsync(50);
|
|
74
|
+
// After error, img should be replaced with fallback div
|
|
75
|
+
const fallbackImg = avatar?.querySelector('img');
|
|
76
|
+
expect(fallbackImg).toBeNull();
|
|
77
|
+
// The custom fallback should be rendered
|
|
78
|
+
const customElement = avatar?.querySelector('[data-testid="custom-fallback"]');
|
|
79
|
+
expect(customElement).not.toBeNull();
|
|
80
|
+
expect(customElement?.textContent).toBe('AB');
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
it('should apply custom style from props', async () => {
|
|
84
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
85
|
+
const rootElement = document.getElementById('root');
|
|
86
|
+
initializeShadeRoot({
|
|
87
|
+
injector,
|
|
88
|
+
rootElement,
|
|
89
|
+
jsxElement: createComponent(Avatar, { avatarUrl: "https://example.com/avatar.png", style: { width: '64px', height: '64px' } }),
|
|
90
|
+
});
|
|
91
|
+
await sleepAsync(50);
|
|
92
|
+
const avatar = document.querySelector('shade-avatar');
|
|
93
|
+
expect(avatar).not.toBeNull();
|
|
94
|
+
expect(avatar.style.width).toBe('64px');
|
|
95
|
+
expect(avatar.style.height).toBe('64px');
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
it('should pass through additional props to the container', async () => {
|
|
99
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
100
|
+
const rootElement = document.getElementById('root');
|
|
101
|
+
initializeShadeRoot({
|
|
102
|
+
injector,
|
|
103
|
+
rootElement,
|
|
104
|
+
jsxElement: createComponent(Avatar, { avatarUrl: "https://example.com/avatar.png", className: "custom-avatar", title: "User Avatar" }),
|
|
105
|
+
});
|
|
106
|
+
await sleepAsync(50);
|
|
107
|
+
const avatar = document.querySelector('shade-avatar');
|
|
108
|
+
expect(avatar).not.toBeNull();
|
|
109
|
+
expect(avatar.className).toBe('custom-avatar');
|
|
110
|
+
expect(avatar.title).toBe('User Avatar');
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
//# sourceMappingURL=avatar.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar.spec.js","sourceRoot":"","sources":["../../src/components/avatar.spec.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../src/components/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEvD,OAAO,KAAK,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../src/components/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAA;AAGpE,MAAM,MAAM,WAAW,GAAG,cAAc,CAAC,iBAAiB,CAAC,GAAG;IAC5D,OAAO,CAAC,EAAE,WAAW,GAAG,UAAU,CAAA;IAClC,KAAK,CAAC,EAAE,MAAM,OAAO,CAAA;CACtB,CAAA;AA4DD,eAAO,MAAM,MAAM;;;cA9DP,WAAW,GAAG,UAAU;YAC1B,MAAM,OAAO;4GAgLrB,CAAA"}
|