@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.
Files changed (295) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/esm/components/animations.spec.d.ts +2 -0
  3. package/esm/components/animations.spec.d.ts.map +1 -0
  4. package/esm/components/animations.spec.js +201 -0
  5. package/esm/components/animations.spec.js.map +1 -0
  6. package/esm/components/app-bar-link.js +21 -20
  7. package/esm/components/app-bar-link.js.map +1 -1
  8. package/esm/components/app-bar-link.spec.d.ts +2 -0
  9. package/esm/components/app-bar-link.spec.d.ts.map +1 -0
  10. package/esm/components/app-bar-link.spec.js +252 -0
  11. package/esm/components/app-bar-link.spec.js.map +1 -0
  12. package/esm/components/app-bar.js +21 -21
  13. package/esm/components/app-bar.js.map +1 -1
  14. package/esm/components/app-bar.spec.d.ts +2 -0
  15. package/esm/components/app-bar.spec.d.ts.map +1 -0
  16. package/esm/components/app-bar.spec.js +117 -0
  17. package/esm/components/app-bar.spec.js.map +1 -0
  18. package/esm/components/avatar.d.ts.map +1 -1
  19. package/esm/components/avatar.js +15 -19
  20. package/esm/components/avatar.js.map +1 -1
  21. package/esm/components/avatar.spec.d.ts +2 -0
  22. package/esm/components/avatar.spec.d.ts.map +1 -0
  23. package/esm/components/avatar.spec.js +114 -0
  24. package/esm/components/avatar.spec.js.map +1 -0
  25. package/esm/components/button.d.ts.map +1 -1
  26. package/esm/components/button.js +145 -156
  27. package/esm/components/button.js.map +1 -1
  28. package/esm/components/button.spec.d.ts +2 -0
  29. package/esm/components/button.spec.d.ts.map +1 -0
  30. package/esm/components/button.spec.js +155 -0
  31. package/esm/components/button.spec.js.map +1 -0
  32. package/esm/components/command-palette/command-palette-input.d.ts.map +1 -1
  33. package/esm/components/command-palette/command-palette-input.js +18 -16
  34. package/esm/components/command-palette/command-palette-input.js.map +1 -1
  35. package/esm/components/command-palette/command-palette-input.spec.d.ts +2 -0
  36. package/esm/components/command-palette/command-palette-input.spec.d.ts.map +1 -0
  37. package/esm/components/command-palette/command-palette-input.spec.js +233 -0
  38. package/esm/components/command-palette/command-palette-input.spec.js.map +1 -0
  39. package/esm/components/command-palette/command-palette-manager.spec.d.ts +2 -0
  40. package/esm/components/command-palette/command-palette-manager.spec.d.ts.map +1 -0
  41. package/esm/components/command-palette/command-palette-manager.spec.js +362 -0
  42. package/esm/components/command-palette/command-palette-manager.spec.js.map +1 -0
  43. package/esm/components/command-palette/command-palette-suggestion-list.d.ts.map +1 -1
  44. package/esm/components/command-palette/command-palette-suggestion-list.js +42 -46
  45. package/esm/components/command-palette/command-palette-suggestion-list.js.map +1 -1
  46. package/esm/components/command-palette/command-palette-suggestion-list.spec.d.ts +2 -0
  47. package/esm/components/command-palette/command-palette-suggestion-list.spec.d.ts.map +1 -0
  48. package/esm/components/command-palette/command-palette-suggestion-list.spec.js +376 -0
  49. package/esm/components/command-palette/command-palette-suggestion-list.spec.js.map +1 -0
  50. package/esm/components/command-palette/index.d.ts.map +1 -1
  51. package/esm/components/command-palette/index.js +100 -110
  52. package/esm/components/command-palette/index.js.map +1 -1
  53. package/esm/components/command-palette/index.spec.d.ts +2 -0
  54. package/esm/components/command-palette/index.spec.d.ts.map +1 -0
  55. package/esm/components/command-palette/index.spec.js +509 -0
  56. package/esm/components/command-palette/index.spec.js.map +1 -0
  57. package/esm/components/data-grid/body.js +1 -1
  58. package/esm/components/data-grid/body.js.map +1 -1
  59. package/esm/components/data-grid/body.spec.d.ts +2 -0
  60. package/esm/components/data-grid/body.spec.d.ts.map +1 -0
  61. package/esm/components/data-grid/body.spec.js +228 -0
  62. package/esm/components/data-grid/body.spec.js.map +1 -0
  63. package/esm/components/data-grid/data-grid-row.d.ts.map +1 -1
  64. package/esm/components/data-grid/data-grid-row.js +49 -73
  65. package/esm/components/data-grid/data-grid-row.js.map +1 -1
  66. package/esm/components/data-grid/data-grid-row.spec.d.ts +2 -0
  67. package/esm/components/data-grid/data-grid-row.spec.d.ts.map +1 -0
  68. package/esm/components/data-grid/data-grid-row.spec.js +296 -0
  69. package/esm/components/data-grid/data-grid-row.spec.js.map +1 -0
  70. package/esm/components/data-grid/data-grid.d.ts.map +1 -1
  71. package/esm/components/data-grid/data-grid.js +35 -28
  72. package/esm/components/data-grid/data-grid.js.map +1 -1
  73. package/esm/components/data-grid/data-grid.spec.d.ts +2 -0
  74. package/esm/components/data-grid/data-grid.spec.d.ts.map +1 -0
  75. package/esm/components/data-grid/data-grid.spec.js +544 -0
  76. package/esm/components/data-grid/data-grid.spec.js.map +1 -0
  77. package/esm/components/data-grid/footer.js +21 -15
  78. package/esm/components/data-grid/footer.js.map +1 -1
  79. package/esm/components/data-grid/footer.spec.d.ts +2 -0
  80. package/esm/components/data-grid/footer.spec.d.ts.map +1 -0
  81. package/esm/components/data-grid/footer.spec.js +264 -0
  82. package/esm/components/data-grid/footer.spec.js.map +1 -0
  83. package/esm/components/data-grid/header.d.ts.map +1 -1
  84. package/esm/components/data-grid/header.js +55 -33
  85. package/esm/components/data-grid/header.js.map +1 -1
  86. package/esm/components/data-grid/header.spec.d.ts +2 -0
  87. package/esm/components/data-grid/header.spec.d.ts.map +1 -0
  88. package/esm/components/data-grid/header.spec.js +421 -0
  89. package/esm/components/data-grid/header.spec.js.map +1 -0
  90. package/esm/components/data-grid/selection-cell.d.ts.map +1 -1
  91. package/esm/components/data-grid/selection-cell.js +13 -6
  92. package/esm/components/data-grid/selection-cell.js.map +1 -1
  93. package/esm/components/data-grid/selection-cell.spec.d.ts +2 -0
  94. package/esm/components/data-grid/selection-cell.spec.d.ts.map +1 -0
  95. package/esm/components/data-grid/selection-cell.spec.js +118 -0
  96. package/esm/components/data-grid/selection-cell.spec.js.map +1 -0
  97. package/esm/components/fab.d.ts.map +1 -1
  98. package/esm/components/fab.js +10 -1
  99. package/esm/components/fab.js.map +1 -1
  100. package/esm/components/fab.spec.d.ts +2 -0
  101. package/esm/components/fab.spec.d.ts.map +1 -0
  102. package/esm/components/fab.spec.js +95 -0
  103. package/esm/components/fab.spec.js.map +1 -0
  104. package/esm/components/form.spec.d.ts +2 -0
  105. package/esm/components/form.spec.d.ts.map +1 -0
  106. package/esm/components/form.spec.js +314 -0
  107. package/esm/components/form.spec.js.map +1 -0
  108. package/esm/components/grid.d.ts.map +1 -1
  109. package/esm/components/grid.js +40 -37
  110. package/esm/components/grid.js.map +1 -1
  111. package/esm/components/grid.spec.d.ts +2 -0
  112. package/esm/components/grid.spec.d.ts.map +1 -0
  113. package/esm/components/grid.spec.js +316 -0
  114. package/esm/components/grid.spec.js.map +1 -0
  115. package/esm/components/inputs/autocomplete.spec.d.ts +2 -0
  116. package/esm/components/inputs/autocomplete.spec.d.ts.map +1 -0
  117. package/esm/components/inputs/autocomplete.spec.js +194 -0
  118. package/esm/components/inputs/autocomplete.spec.js.map +1 -0
  119. package/esm/components/inputs/input.d.ts.map +1 -1
  120. package/esm/components/inputs/input.js +141 -109
  121. package/esm/components/inputs/input.js.map +1 -1
  122. package/esm/components/inputs/input.spec.d.ts +2 -0
  123. package/esm/components/inputs/input.spec.d.ts.map +1 -0
  124. package/esm/components/inputs/input.spec.js +577 -0
  125. package/esm/components/inputs/input.spec.js.map +1 -0
  126. package/esm/components/inputs/text-area.d.ts.map +1 -1
  127. package/esm/components/inputs/text-area.js +54 -58
  128. package/esm/components/inputs/text-area.js.map +1 -1
  129. package/esm/components/inputs/text-area.spec.d.ts +2 -0
  130. package/esm/components/inputs/text-area.spec.d.ts.map +1 -0
  131. package/esm/components/inputs/text-area.spec.js +214 -0
  132. package/esm/components/inputs/text-area.spec.js.map +1 -0
  133. package/esm/components/loader.js +1 -1
  134. package/esm/components/loader.js.map +1 -1
  135. package/esm/components/loader.spec.d.ts +2 -0
  136. package/esm/components/loader.spec.d.ts.map +1 -0
  137. package/esm/components/loader.spec.js +251 -0
  138. package/esm/components/loader.spec.js.map +1 -0
  139. package/esm/components/modal.d.ts.map +1 -1
  140. package/esm/components/modal.js +11 -9
  141. package/esm/components/modal.js.map +1 -1
  142. package/esm/components/modal.spec.d.ts +2 -0
  143. package/esm/components/modal.spec.d.ts.map +1 -0
  144. package/esm/components/modal.spec.js +227 -0
  145. package/esm/components/modal.spec.js.map +1 -0
  146. package/esm/components/noty-list.d.ts.map +1 -1
  147. package/esm/components/noty-list.js +39 -40
  148. package/esm/components/noty-list.js.map +1 -1
  149. package/esm/components/noty-list.spec.d.ts +2 -0
  150. package/esm/components/noty-list.spec.d.ts.map +1 -0
  151. package/esm/components/noty-list.spec.js +486 -0
  152. package/esm/components/noty-list.spec.js.map +1 -0
  153. package/esm/components/paper.d.ts.map +1 -1
  154. package/esm/components/paper.js +15 -12
  155. package/esm/components/paper.js.map +1 -1
  156. package/esm/components/paper.spec.d.ts +2 -0
  157. package/esm/components/paper.spec.d.ts.map +1 -0
  158. package/esm/components/paper.spec.js +63 -0
  159. package/esm/components/paper.spec.js.map +1 -0
  160. package/esm/components/skeleton.js +1 -1
  161. package/esm/components/skeleton.js.map +1 -1
  162. package/esm/components/skeleton.spec.d.ts +2 -0
  163. package/esm/components/skeleton.spec.d.ts.map +1 -0
  164. package/esm/components/skeleton.spec.js +159 -0
  165. package/esm/components/skeleton.spec.js.map +1 -0
  166. package/esm/components/styles.spec.d.ts +2 -0
  167. package/esm/components/styles.spec.d.ts.map +1 -0
  168. package/esm/components/styles.spec.js +56 -0
  169. package/esm/components/styles.spec.js.map +1 -0
  170. package/esm/components/suggest/index.d.ts.map +1 -1
  171. package/esm/components/suggest/index.js +74 -83
  172. package/esm/components/suggest/index.js.map +1 -1
  173. package/esm/components/suggest/index.spec.d.ts +2 -0
  174. package/esm/components/suggest/index.spec.d.ts.map +1 -0
  175. package/esm/components/suggest/index.spec.js +515 -0
  176. package/esm/components/suggest/index.spec.js.map +1 -0
  177. package/esm/components/suggest/suggest-input.d.ts.map +1 -1
  178. package/esm/components/suggest/suggest-input.js +16 -17
  179. package/esm/components/suggest/suggest-input.js.map +1 -1
  180. package/esm/components/suggest/suggest-input.spec.d.ts +2 -0
  181. package/esm/components/suggest/suggest-input.spec.d.ts.map +1 -0
  182. package/esm/components/suggest/suggest-input.spec.js +138 -0
  183. package/esm/components/suggest/suggest-input.spec.js.map +1 -0
  184. package/esm/components/suggest/suggest-manager.spec.d.ts +2 -0
  185. package/esm/components/suggest/suggest-manager.spec.d.ts.map +1 -0
  186. package/esm/components/suggest/suggest-manager.spec.js +308 -0
  187. package/esm/components/suggest/suggest-manager.spec.js.map +1 -0
  188. package/esm/components/suggest/suggestion-list.d.ts.map +1 -1
  189. package/esm/components/suggest/suggestion-list.js +43 -48
  190. package/esm/components/suggest/suggestion-list.js.map +1 -1
  191. package/esm/components/suggest/suggestion-list.spec.d.ts +2 -0
  192. package/esm/components/suggest/suggestion-list.spec.d.ts.map +1 -0
  193. package/esm/components/suggest/suggestion-list.spec.js +252 -0
  194. package/esm/components/suggest/suggestion-list.spec.js.map +1 -0
  195. package/esm/components/tabs.d.ts.map +1 -1
  196. package/esm/components/tabs.js +32 -18
  197. package/esm/components/tabs.js.map +1 -1
  198. package/esm/components/tabs.spec.d.ts +2 -0
  199. package/esm/components/tabs.spec.d.ts.map +1 -0
  200. package/esm/components/tabs.spec.js +187 -0
  201. package/esm/components/tabs.spec.js.map +1 -0
  202. package/esm/components/wizard/index.d.ts.map +1 -1
  203. package/esm/components/wizard/index.js +10 -7
  204. package/esm/components/wizard/index.js.map +1 -1
  205. package/esm/components/wizard/index.spec.d.ts +2 -0
  206. package/esm/components/wizard/index.spec.d.ts.map +1 -0
  207. package/esm/components/wizard/index.spec.js +171 -0
  208. package/esm/components/wizard/index.spec.js.map +1 -0
  209. package/esm/services/collection-service.spec.js +391 -2
  210. package/esm/services/collection-service.spec.js.map +1 -1
  211. package/esm/services/css-variable-theme.d.ts.map +1 -1
  212. package/esm/services/css-variable-theme.js +21 -1
  213. package/esm/services/css-variable-theme.js.map +1 -1
  214. package/esm/services/css-variable-theme.spec.d.ts +2 -0
  215. package/esm/services/css-variable-theme.spec.d.ts.map +1 -0
  216. package/esm/services/css-variable-theme.spec.js +169 -0
  217. package/esm/services/css-variable-theme.spec.js.map +1 -0
  218. package/esm/services/default-palette.d.ts +4 -0
  219. package/esm/services/default-palette.d.ts.map +1 -1
  220. package/esm/services/default-palette.js +22 -0
  221. package/esm/services/default-palette.js.map +1 -1
  222. package/esm/services/theme-provider-service.d.ts +59 -1
  223. package/esm/services/theme-provider-service.d.ts.map +1 -1
  224. package/esm/services/theme-provider-service.js.map +1 -1
  225. package/esm/services/theme-provider-service.spec.d.ts +2 -0
  226. package/esm/services/theme-provider-service.spec.d.ts.map +1 -0
  227. package/esm/services/theme-provider-service.spec.js +166 -0
  228. package/esm/services/theme-provider-service.spec.js.map +1 -0
  229. package/package.json +2 -2
  230. package/src/components/animations.spec.ts +299 -0
  231. package/src/components/app-bar-link.spec.tsx +341 -0
  232. package/src/components/app-bar-link.tsx +21 -21
  233. package/src/components/app-bar.spec.tsx +142 -0
  234. package/src/components/app-bar.tsx +22 -22
  235. package/src/components/avatar.spec.tsx +146 -0
  236. package/src/components/avatar.tsx +17 -20
  237. package/src/components/button.spec.tsx +193 -0
  238. package/src/components/button.tsx +162 -197
  239. package/src/components/command-palette/command-palette-input.spec.tsx +320 -0
  240. package/src/components/command-palette/command-palette-input.tsx +19 -22
  241. package/src/components/command-palette/command-palette-manager.spec.ts +470 -0
  242. package/src/components/command-palette/command-palette-suggestion-list.spec.tsx +499 -0
  243. package/src/components/command-palette/command-palette-suggestion-list.tsx +42 -46
  244. package/src/components/command-palette/index.spec.tsx +684 -0
  245. package/src/components/command-palette/index.tsx +107 -136
  246. package/src/components/data-grid/body.spec.tsx +340 -0
  247. package/src/components/data-grid/body.tsx +1 -1
  248. package/src/components/data-grid/data-grid-row.spec.tsx +382 -0
  249. package/src/components/data-grid/data-grid-row.tsx +50 -82
  250. package/src/components/data-grid/data-grid.spec.tsx +939 -0
  251. package/src/components/data-grid/data-grid.tsx +38 -35
  252. package/src/components/data-grid/footer.spec.tsx +344 -0
  253. package/src/components/data-grid/footer.tsx +19 -19
  254. package/src/components/data-grid/header.spec.tsx +563 -0
  255. package/src/components/data-grid/header.tsx +53 -44
  256. package/src/components/data-grid/selection-cell.spec.tsx +150 -0
  257. package/src/components/data-grid/selection-cell.tsx +12 -6
  258. package/src/components/fab.spec.tsx +108 -0
  259. package/src/components/fab.tsx +10 -1
  260. package/src/components/form.spec.tsx +481 -0
  261. package/src/components/grid.spec.tsx +334 -0
  262. package/src/components/grid.tsx +57 -63
  263. package/src/components/inputs/autocomplete.spec.tsx +258 -0
  264. package/src/components/inputs/input.spec.tsx +808 -0
  265. package/src/components/inputs/input.tsx +153 -139
  266. package/src/components/inputs/text-area.spec.tsx +285 -0
  267. package/src/components/inputs/text-area.tsx +53 -79
  268. package/src/components/loader.spec.tsx +346 -0
  269. package/src/components/loader.tsx +1 -1
  270. package/src/components/modal.spec.tsx +304 -0
  271. package/src/components/modal.tsx +11 -9
  272. package/src/components/noty-list.spec.tsx +631 -0
  273. package/src/components/noty-list.tsx +39 -50
  274. package/src/components/paper.spec.tsx +72 -0
  275. package/src/components/paper.tsx +15 -13
  276. package/src/components/skeleton.spec.tsx +219 -0
  277. package/src/components/skeleton.tsx +1 -1
  278. package/src/components/styles.spec.ts +70 -0
  279. package/src/components/suggest/index.spec.tsx +861 -0
  280. package/src/components/suggest/index.tsx +74 -101
  281. package/src/components/suggest/suggest-input.spec.tsx +181 -0
  282. package/src/components/suggest/suggest-input.tsx +16 -24
  283. package/src/components/suggest/suggest-manager.spec.ts +409 -0
  284. package/src/components/suggest/suggestion-list.spec.tsx +334 -0
  285. package/src/components/suggest/suggestion-list.tsx +43 -48
  286. package/src/components/tabs.spec.tsx +236 -0
  287. package/src/components/tabs.tsx +33 -21
  288. package/src/components/wizard/index.spec.tsx +224 -0
  289. package/src/components/wizard/index.tsx +10 -9
  290. package/src/services/collection-service.spec.ts +492 -3
  291. package/src/services/css-variable-theme.spec.ts +204 -0
  292. package/src/services/css-variable-theme.ts +21 -1
  293. package/src/services/default-palette.ts +22 -0
  294. package/src/services/theme-provider-service.spec.ts +195 -0
  295. package/src/services/theme-provider-service.ts +60 -2
@@ -1,30 +1,30 @@
1
- import { Shade, createComponent, attachProps } from '@furystack/shades';
2
- import { ThemeProviderService } from '../services/theme-provider-service.js';
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.style.opacity = '1';
24
+ element.classList.add('visible');
8
25
  });
9
26
  },
10
- render: ({ children, injector, element }) => {
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,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAE5E,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC;IAC1B,aAAa,EAAE,eAAe;IAC9B,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;QAC3B,qBAAqB,CAAC,GAAG,EAAE;YACzB,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAA;QAC7B,CAAC,CAAC,CAAA;IACJ,CAAC;IACD,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QAC1C,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAA;QAC5D,WAAW,CAAC,OAAO,EAAE;YACnB,KAAK,EAAE;gBACL,KAAK,EAAE,MAAM;gBACb,UAAU,EAAE,uBAAuB;gBACnC,cAAc,EAAE,YAAY;gBAC5B,OAAO,EAAE,MAAM;gBACf,cAAc,EAAE,YAAY;gBAC5B,UAAU,EAAE,QAAQ;gBACpB,SAAS,EAAE,0BAA0B;gBACrC,UAAU,EACR,6GAA6G;gBAC/G,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,OAAO;gBACjB,MAAM,EAAE,GAAG;gBACX,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS;aAC5B;SACF,CAAC,CAAA;QACF,OAAO,uCAAG,QAAQ,CAAI,CAAA;IACxB,CAAC;CACF,CAAC,CAAA"}
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=app-bar.spec.d.ts.map
@@ -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;;;4GAiFnE,CAAA"}
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"}
@@ -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,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,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,OAAO;gBACf,QAAQ,EAAE,QAAQ;gBAClB,YAAY,EAAE,KAAK;gBACnB,SAAS,EACP,2GAA2G;gBAC7G,eAAe,EAAE,mFAAmF;gBACpG,OAAO,EAAE,MAAM;gBACf,QAAQ,EAAE,UAAU;gBACpB,UAAU,EAAE,uCAAuC;gBACnD,GAAG,cAAc,EAAE,KAAK;aACzB;YACD,YAAY,EAAE,GAAG,EAAE;gBACjB,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,8BAA8B,CAAA;gBACxD,OAAO,CAAC,KAAK,CAAC,SAAS;oBACrB,6GAA6G,CAAA;YACjH,CAAC;YACD,YAAY,EAAE,GAAG,EAAE;gBACjB,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,wBAAwB,CAAA;gBAClD,OAAO,CAAC,KAAK,CAAC,SAAS;oBACrB,2GAA2G,CAAA;YAC/G,CAAC;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"}
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=avatar.spec.d.ts.map
@@ -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,EAAS,MAAM,uCAAuC,CAAA;AAI3E,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;AA0DD,eAAO,MAAM,MAAM;;;cA5DP,WAAW,GAAG,UAAU;YAC1B,MAAM,OAAO;4GAkNrB,CAAA"}
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"}