@furystack/shades-common-components 3.6.0 → 4.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 (165) hide show
  1. package/dist/components/app-bar-link.js +20 -24
  2. package/dist/components/app-bar-link.js.map +1 -1
  3. package/dist/components/app-bar.js +9 -12
  4. package/dist/components/app-bar.js.map +1 -1
  5. package/dist/components/avatar.js +20 -18
  6. package/dist/components/avatar.js.map +1 -1
  7. package/dist/components/button.js +51 -37
  8. package/dist/components/button.js.map +1 -1
  9. package/dist/components/command-palette/command-palette-input.js +24 -29
  10. package/dist/components/command-palette/command-palette-input.js.map +1 -1
  11. package/dist/components/command-palette/command-palette-suggestion-list.js +38 -47
  12. package/dist/components/command-palette/command-palette-suggestion-list.js.map +1 -1
  13. package/dist/components/command-palette/index.js +34 -40
  14. package/dist/components/command-palette/index.js.map +1 -1
  15. package/dist/components/data-grid/body.js +6 -13
  16. package/dist/components/data-grid/body.js.map +1 -1
  17. package/dist/components/data-grid/data-grid-row.js +29 -31
  18. package/dist/components/data-grid/data-grid-row.js.map +1 -1
  19. package/dist/components/data-grid/data-grid.js +6 -21
  20. package/dist/components/data-grid/data-grid.js.map +1 -1
  21. package/dist/components/data-grid/footer.js +9 -21
  22. package/dist/components/data-grid/footer.js.map +1 -1
  23. package/dist/components/data-grid/header.js +19 -18
  24. package/dist/components/data-grid/header.js.map +1 -1
  25. package/dist/components/data-grid/selection-cell.js +9 -23
  26. package/dist/components/data-grid/selection-cell.js.map +1 -1
  27. package/dist/components/fab.js +10 -5
  28. package/dist/components/fab.js.map +1 -1
  29. package/dist/components/grid.js +1 -10
  30. package/dist/components/grid.js.map +1 -1
  31. package/dist/components/inputs/autocomplete.js +3 -13
  32. package/dist/components/inputs/autocomplete.js.map +1 -1
  33. package/dist/components/inputs/input.js +31 -39
  34. package/dist/components/inputs/input.js.map +1 -1
  35. package/dist/components/inputs/text-area.js +3 -11
  36. package/dist/components/inputs/text-area.js.map +1 -1
  37. package/dist/components/loader.js +8 -14
  38. package/dist/components/loader.js.map +1 -1
  39. package/dist/components/modal.js +7 -17
  40. package/dist/components/modal.js.map +1 -1
  41. package/dist/components/noty-list.js +27 -29
  42. package/dist/components/noty-list.js.map +1 -1
  43. package/dist/components/paper.js +13 -17
  44. package/dist/components/paper.js.map +1 -1
  45. package/dist/components/suggest/index.js +14 -20
  46. package/dist/components/suggest/index.js.map +1 -1
  47. package/dist/components/suggest/suggest-input.js +9 -10
  48. package/dist/components/suggest/suggest-input.js.map +1 -1
  49. package/dist/components/suggest/suggest-manager.js +8 -2
  50. package/dist/components/suggest/suggest-manager.js.map +1 -1
  51. package/dist/components/suggest/suggestion-list.js +27 -30
  52. package/dist/components/suggest/suggestion-list.js.map +1 -1
  53. package/dist/components/tabs.js +32 -44
  54. package/dist/components/tabs.js.map +1 -1
  55. package/dist/components/wizard/index.js +4 -7
  56. package/dist/components/wizard/index.js.map +1 -1
  57. package/dist/services/collection-service.js +10 -0
  58. package/dist/services/collection-service.js.map +1 -1
  59. package/dist/services/default-variable-theme.js +80 -0
  60. package/dist/services/default-variable-theme.js.map +1 -0
  61. package/dist/services/index.js +1 -0
  62. package/dist/services/index.js.map +1 -1
  63. package/dist/services/theme-provider-service.js +9 -7
  64. package/dist/services/theme-provider-service.js.map +1 -1
  65. package/package.json +6 -6
  66. package/src/components/app-bar-link.tsx +29 -35
  67. package/src/components/app-bar.tsx +22 -30
  68. package/src/components/avatar.tsx +40 -36
  69. package/src/components/button.tsx +91 -81
  70. package/src/components/command-palette/command-palette-input.tsx +15 -13
  71. package/src/components/command-palette/command-palette-suggestion-list.tsx +50 -58
  72. package/src/components/command-palette/index.tsx +54 -52
  73. package/src/components/data-grid/body.tsx +10 -22
  74. package/src/components/data-grid/data-grid-row.tsx +64 -63
  75. package/src/components/data-grid/data-grid.tsx +13 -24
  76. package/src/components/data-grid/footer.tsx +12 -23
  77. package/src/components/data-grid/header.tsx +34 -30
  78. package/src/components/data-grid/selection-cell.tsx +9 -19
  79. package/src/components/fab.tsx +21 -23
  80. package/src/components/grid.tsx +2 -11
  81. package/src/components/inputs/autocomplete.tsx +10 -16
  82. package/src/components/inputs/input.tsx +37 -42
  83. package/src/components/inputs/text-area.tsx +4 -18
  84. package/src/components/loader.tsx +19 -13
  85. package/src/components/modal.tsx +9 -17
  86. package/src/components/noty-list.tsx +55 -54
  87. package/src/components/paper.tsx +19 -26
  88. package/src/components/suggest/index.tsx +19 -30
  89. package/src/components/suggest/suggest-input.tsx +22 -15
  90. package/src/components/suggest/suggest-manager.ts +15 -3
  91. package/src/components/suggest/suggestion-list.tsx +90 -85
  92. package/src/components/tabs.tsx +50 -70
  93. package/src/components/wizard/index.tsx +6 -13
  94. package/src/services/collection-service.ts +14 -0
  95. package/src/services/default-variable-theme.ts +83 -0
  96. package/src/services/index.ts +1 -0
  97. package/src/services/theme-provider-service.ts +11 -8
  98. package/tsconfig.json +1 -1
  99. package/tsconfig.tsbuildinfo +1 -1
  100. package/types/components/app-bar-link.d.ts +1 -1
  101. package/types/components/app-bar-link.d.ts.map +1 -1
  102. package/types/components/app-bar.d.ts +1 -1
  103. package/types/components/app-bar.d.ts.map +1 -1
  104. package/types/components/avatar.d.ts +2 -1
  105. package/types/components/avatar.d.ts.map +1 -1
  106. package/types/components/button.d.ts +1 -1
  107. package/types/components/button.d.ts.map +1 -1
  108. package/types/components/command-palette/command-palette-input.d.ts +1 -1
  109. package/types/components/command-palette/command-palette-input.d.ts.map +1 -1
  110. package/types/components/command-palette/command-palette-suggestion-list.d.ts +1 -1
  111. package/types/components/command-palette/command-palette-suggestion-list.d.ts.map +1 -1
  112. package/types/components/command-palette/index.d.ts +1 -5
  113. package/types/components/command-palette/index.d.ts.map +1 -1
  114. package/types/components/data-grid/body.d.ts +1 -5
  115. package/types/components/data-grid/body.d.ts.map +1 -1
  116. package/types/components/data-grid/data-grid-row.d.ts +1 -5
  117. package/types/components/data-grid/data-grid-row.d.ts.map +1 -1
  118. package/types/components/data-grid/data-grid.d.ts +5 -3
  119. package/types/components/data-grid/data-grid.d.ts.map +1 -1
  120. package/types/components/data-grid/footer.d.ts +1 -1
  121. package/types/components/data-grid/footer.d.ts.map +1 -1
  122. package/types/components/data-grid/header.d.ts +1 -1
  123. package/types/components/data-grid/header.d.ts.map +1 -1
  124. package/types/components/data-grid/selection-cell.d.ts +1 -1
  125. package/types/components/data-grid/selection-cell.d.ts.map +1 -1
  126. package/types/components/fab.d.ts +1 -1
  127. package/types/components/fab.d.ts.map +1 -1
  128. package/types/components/grid.d.ts +1 -1
  129. package/types/components/grid.d.ts.map +1 -1
  130. package/types/components/inputs/autocomplete.d.ts +1 -1
  131. package/types/components/inputs/autocomplete.d.ts.map +1 -1
  132. package/types/components/inputs/input.d.ts +2 -3
  133. package/types/components/inputs/input.d.ts.map +1 -1
  134. package/types/components/inputs/text-area.d.ts +1 -6
  135. package/types/components/inputs/text-area.d.ts.map +1 -1
  136. package/types/components/loader.d.ts +9 -1
  137. package/types/components/loader.d.ts.map +1 -1
  138. package/types/components/modal.d.ts +1 -1
  139. package/types/components/modal.d.ts.map +1 -1
  140. package/types/components/noty-list.d.ts +2 -2
  141. package/types/components/noty-list.d.ts.map +1 -1
  142. package/types/components/paper.d.ts +1 -1
  143. package/types/components/paper.d.ts.map +1 -1
  144. package/types/components/skeleton.d.ts +1 -1
  145. package/types/components/skeleton.d.ts.map +1 -1
  146. package/types/components/suggest/index.d.ts +1 -5
  147. package/types/components/suggest/index.d.ts.map +1 -1
  148. package/types/components/suggest/suggest-input.d.ts +1 -1
  149. package/types/components/suggest/suggest-input.d.ts.map +1 -1
  150. package/types/components/suggest/suggest-manager.d.ts +2 -1
  151. package/types/components/suggest/suggest-manager.d.ts.map +1 -1
  152. package/types/components/suggest/suggestion-list.d.ts +1 -1
  153. package/types/components/suggest/suggestion-list.d.ts.map +1 -1
  154. package/types/components/tabs.d.ts +2 -2
  155. package/types/components/tabs.d.ts.map +1 -1
  156. package/types/components/wizard/index.d.ts +2 -2
  157. package/types/components/wizard/index.d.ts.map +1 -1
  158. package/types/services/collection-service.d.ts +4 -0
  159. package/types/services/collection-service.d.ts.map +1 -1
  160. package/types/services/default-variable-theme.d.ts +7 -0
  161. package/types/services/default-variable-theme.d.ts.map +1 -0
  162. package/types/services/index.d.ts +1 -0
  163. package/types/services/index.d.ts.map +1 -1
  164. package/types/services/theme-provider-service.d.ts +2 -3
  165. package/types/services/theme-provider-service.d.ts.map +1 -1
@@ -8,8 +8,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.ThemeProviderService = exports.RgbColor = void 0;
10
10
  const inject_1 = require("@furystack/inject");
11
- const utils_1 = require("@furystack/utils");
12
- const default_dark_theme_1 = require("./default-dark-theme");
11
+ const default_variable_theme_1 = require("./default-variable-theme");
13
12
  class RgbColor {
14
13
  constructor(r, g, b, a = 1) {
15
14
  this.r = r;
@@ -31,10 +30,10 @@ exports.RgbColor = RgbColor;
31
30
  */
32
31
  let ThemeProviderService = class ThemeProviderService {
33
32
  constructor() {
34
- this.theme = new utils_1.ObservableValue(default_dark_theme_1.defaultDarkTheme);
33
+ this.theme = default_variable_theme_1.defaultVariableTheme;
35
34
  }
36
35
  /**
37
- *
36
+ * @deprecated does not respect CSS vars
38
37
  * @param color The background color
39
38
  * @param bright The Bright color
40
39
  * @param dark The Dark color
@@ -51,6 +50,9 @@ let ThemeProviderService = class ThemeProviderService {
51
50
  * @returns The parsed R,G,B, A values
52
51
  */
53
52
  getRgbFromColorString(color) {
53
+ if (color.startsWith('var(--')) {
54
+ return this.getRgbFromColorString((0, default_variable_theme_1.getCssVariable)(color));
55
+ }
54
56
  if (color.startsWith('#')) {
55
57
  if (color.length === 7) {
56
58
  const r = parseInt(color.substr(1, 2), 16);
@@ -71,13 +73,13 @@ let ThemeProviderService = class ThemeProviderService {
71
73
  return new RgbColor(parseInt(result.groups.red, 10), parseInt(result.groups.green, 10), parseInt(result.groups.blue, 10), parseInt(result.groups.alpha, 10));
72
74
  }
73
75
  }
74
- throw Error(`Color format '${color} is not supported.'`);
76
+ throw Error(`Color format '${color}' is not supported.'`);
75
77
  }
76
78
  set(change) {
77
- this.theme.setValue((0, utils_1.deepMerge)(this.theme.getValue(), change));
79
+ (0, default_variable_theme_1.useThemeCssVariables)(change);
78
80
  }
79
81
  dispose() {
80
- this.theme.dispose();
82
+ /** */
81
83
  }
82
84
  };
83
85
  ThemeProviderService = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"theme-provider-service.js","sourceRoot":"","sources":["../../src/services/theme-provider-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"theme-provider-service.js","sourceRoot":"","sources":["../../src/services/theme-provider-service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@furystack/shades-common-components",
3
- "version": "3.6.0",
3
+ "version": "4.0.0",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "FuryStack",
@@ -17,14 +17,14 @@
17
17
  "author": "gallay.lajos@gmail.com",
18
18
  "license": "GPL-2.0",
19
19
  "devDependencies": {
20
- "@types/jest": "^29.2.5",
20
+ "@types/jest": "^29.2.6",
21
21
  "typescript": "4.9.4"
22
22
  },
23
23
  "dependencies": {
24
- "@furystack/core": "^11.2.2",
25
- "@furystack/inject": "^7.1.4",
26
- "@furystack/shades": "^6.1.4",
27
- "@furystack/utils": "^3.1.4",
24
+ "@furystack/core": "^11.2.3",
25
+ "@furystack/inject": "^7.1.5",
26
+ "@furystack/shades": "^7.0.0",
27
+ "@furystack/utils": "^3.1.5",
28
28
  "path-to-regexp": "^6.2.1",
29
29
  "semaphore-async-await": "^1.5.1"
30
30
  },
@@ -1,45 +1,39 @@
1
1
  import type { RouteLinkProps } from '@furystack/shades'
2
+ import { attachProps } from '@furystack/shades'
2
3
  import { createComponent, LocationService, RouteLink, Shade } from '@furystack/shades'
3
4
  import { match } from 'path-to-regexp'
4
5
  import { ThemeProviderService } from '../services'
5
6
 
6
- export const AppBarLink = Shade<RouteLinkProps, { isActive: boolean }>({
7
- getInitialState: () => ({ isActive: false }),
8
- resources: ({ injector, props, updateState, element, getState }) => {
9
- const updateColor = () => {
10
- const { isActive } = getState()
7
+ export const AppBarLink = Shade<RouteLinkProps>({
8
+ shadowDomName: 'shade-app-bar-link',
9
+ render: ({ children, props, useObservable, injector, element }) => {
10
+ const getAnchorStyle = (currentUrl: string) => {
11
+ const isActive = !!match(props.href as string)(currentUrl)
11
12
  const themeProviderService = injector.getInstance(ThemeProviderService)
12
- const theme = themeProviderService.theme.getValue()
13
- const el = element.querySelector('a') as HTMLElement
14
- const backgroundColor = isActive ? theme.button.active : 'rgba(128, 128, 128, 0.05)'
15
-
16
- el.style.backgroundColor = backgroundColor
17
- el.style.color = themeProviderService.getTextColor(backgroundColor)
13
+ const { theme } = themeProviderService
14
+ return {
15
+ display: 'flex',
16
+ height: '100%',
17
+ textDecoration: 'none',
18
+ alignItems: 'center',
19
+ padding: '0 8px',
20
+ transition: 'color .2s ease-in-out, transform .2s ease-in-out',
21
+ color: isActive ? theme.text.primary : theme.text.secondary,
22
+ opacity: isActive ? '1' : '0.8',
23
+ transform: isActive ? 'scale(1)' : 'scale(0.9)',
24
+ cursor: 'pointer',
25
+ }
18
26
  }
19
- return [
20
- injector.getInstance(LocationService).onLocationChanged.subscribe(async (currentUrl) => {
21
- const isActive = !!match(props.href as string)(currentUrl)
22
- updateState({ isActive }, false)
23
- updateColor()
24
- }, true),
25
- ]
26
- },
27
- shadowDomName: 'shade-app-bar-link',
28
- render: ({ children, props }) => {
29
- return (
30
- <RouteLink
31
- style={{
32
- display: 'flex',
33
- height: '100%',
34
- textDecoration: 'none',
35
- alignItems: 'center',
36
- padding: '0 8px',
37
- ...props.style,
38
- }}
39
- {...props}
40
- >
41
- {children}
42
- </RouteLink>
27
+
28
+ const [currentUrl] = useObservable(
29
+ 'locationChange',
30
+ injector.getInstance(LocationService).onLocationPathChanged /*, (newUrl) => {
31
+ attachProps(element as HTMLElement, { style: getAnchorStyle(newUrl) })
32
+ }*/,
43
33
  )
34
+
35
+ attachProps(element as HTMLElement, { style: getAnchorStyle(currentUrl) })
36
+
37
+ return <RouteLink {...props}>{children}</RouteLink>
44
38
  },
45
39
  })
@@ -1,40 +1,32 @@
1
- import { Shade, createComponent } from '@furystack/shades'
1
+ import { Shade, createComponent, attachProps } from '@furystack/shades'
2
2
  import { ThemeProviderService } from '../services/theme-provider-service'
3
3
 
4
4
  export const AppBar = Shade({
5
5
  shadowDomName: 'shade-app-bar',
6
- resources: ({ element, injector }) => [
7
- injector.getInstance(ThemeProviderService).theme.subscribe((t) => {
8
- ;(element.children[0] as HTMLElement).style.color = t.text.secondary
9
- }, true), // TODO: Check TRUE
10
- ],
11
6
  constructed: ({ element }) => {
12
- const container = element.children[0] as HTMLElement
13
7
  requestAnimationFrame(() => {
14
- // container.style.padding = '8px 8px'
15
- container.style.opacity = '1'
8
+ element.style.opacity = '1'
16
9
  })
17
10
  },
18
- render: ({ children }) => {
19
- return (
20
- <div
21
- style={{
22
- width: '100%',
23
- background: 'rgba(128,128,128,0.2)',
24
- backdropFilter: 'blur(15px)',
25
- display: 'flex',
26
- justifyContent: 'flex-start',
27
- alignItems: 'center',
28
- boxShadow: '0 0 12px rgba(0,0,0,0.6)',
29
- transition:
30
- 'opacity .35s cubic-bezier(0.550, 0.085, 0.680, 0.530), padding .2s cubic-bezier(0.550, 0.085, 0.680, 0.530)',
31
- opacity: '0',
32
- position: 'fixed',
33
- zIndex: '1',
34
- }}
35
- >
36
- {children}
37
- </div>
38
- )
11
+ render: ({ children, injector, element }) => {
12
+ const { theme } = injector.getInstance(ThemeProviderService)
13
+ attachProps(element, {
14
+ style: {
15
+ width: '100%',
16
+ background: 'rgba(128,128,128,0.2)',
17
+ backdropFilter: 'blur(15px)',
18
+ display: 'flex',
19
+ justifyContent: 'flex-start',
20
+ alignItems: 'center',
21
+ boxShadow: '0 0 12px rgba(0,0,0,0.6)',
22
+ transition:
23
+ 'opacity .35s cubic-bezier(0.550, 0.085, 0.680, 0.530), padding .2s cubic-bezier(0.550, 0.085, 0.680, 0.530)',
24
+ opacity: '0',
25
+ position: 'fixed',
26
+ zIndex: '1',
27
+ color: theme.text.secondary,
28
+ },
29
+ })
30
+ return <>{children}</>
39
31
  },
40
32
  })
@@ -1,46 +1,50 @@
1
1
  import type { PartialElement } from '@furystack/shades'
2
- import { Shade, createComponent } from '@furystack/shades'
2
+ import { Shade, createComponent, attachProps } from '@furystack/shades'
3
3
 
4
- export type AvatarProps = { avatarUrl: string } & PartialElement<HTMLDivElement>
4
+ export type AvatarProps = { avatarUrl: string; fallback?: JSX.Element } & PartialElement<HTMLDivElement>
5
5
 
6
6
  export const Avatar = Shade<AvatarProps>({
7
7
  shadowDomName: 'shade-avatar',
8
- render: ({ props }) => {
9
- const { ...divProps } = props
8
+ render: ({ props, element }) => {
9
+ const { avatarUrl, ...containerProps } = props
10
+
11
+ attachProps(element, {
12
+ ...containerProps,
13
+ style: {
14
+ width: '128px',
15
+ height: '128px',
16
+ overflow: 'hidden',
17
+ borderRadius: '50%',
18
+ boxShadow: '0px 0px 8px 3px rgba(128,128,128,0.2)',
19
+ backgroundColor: 'rgba(128,128,128,0.3)',
20
+ display: 'flex',
21
+ ...containerProps?.style,
22
+ },
23
+ })
24
+
10
25
  return (
11
- <div
12
- {...divProps}
13
- style={{
14
- width: '100%',
15
- height: '100%',
16
- overflow: 'hidden',
17
- borderRadius: '50%',
18
- boxShadow: '0px 0px 8px 3px rgba(128,128,128,0.2)',
19
- backgroundColor: 'rgba(128,128,128,0.3)',
20
- ...(props.style || {}),
26
+ <img
27
+ style={{ width: '100%', height: '100%', objectFit: 'cover', backgroundPosition: 'center' }}
28
+ alt={'avatar image'}
29
+ src={props.avatarUrl}
30
+ onerror={(ev) => {
31
+ ;((ev as Event).target as HTMLImageElement).replaceWith(
32
+ <div
33
+ style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100%', width: '100%' }}
34
+ >
35
+ <div
36
+ style={{
37
+ textAlign: 'center',
38
+ userSelect: 'none',
39
+ fontSize: '32px',
40
+ }}
41
+ >
42
+ {props.fallback || '🛑'}
43
+ </div>
44
+ </div>,
45
+ )
21
46
  }}
22
- >
23
- <img
24
- style={{ width: '100%', height: '100%' }}
25
- alt={'avatar image'}
26
- src={props.avatarUrl}
27
- onerror={(ev) => {
28
- ;((ev as Event).target as HTMLImageElement).replaceWith(
29
- <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100%' }}>
30
- <div
31
- style={{
32
- fontVariant: 'all-petite-caps',
33
- fontSize: '2em',
34
- height: 'calc(100% + 7px)',
35
- cursor: 'default',
36
- userSelect: 'none',
37
- }}
38
- />
39
- </div>,
40
- )
41
- }}
42
- />
43
- </div>
47
+ />
44
48
  )
45
49
  },
46
50
  })
@@ -1,8 +1,10 @@
1
1
  import type { PartialElement } from '@furystack/shades'
2
+ import { attachProps } from '@furystack/shades'
2
3
  import { Shade, createComponent } from '@furystack/shades'
3
4
  import { promisifyAnimation } from '../utils/promisify-animation'
4
5
  import type { Palette, Theme } from '../services/theme-provider-service'
5
6
  import { ThemeProviderService } from '../services/theme-provider-service'
7
+ import { Trace } from '@furystack/utils'
6
8
 
7
9
  export type ButtonProps = PartialElement<HTMLButtonElement> & {
8
10
  variant?: 'contained' | 'outlined'
@@ -65,22 +67,16 @@ const getHoveredTextColor = (buttonProps: ButtonProps, theme: Theme, fallback: (
65
67
  : theme.text.primary
66
68
  : fallback()
67
69
 
68
- export const Button = Shade<ButtonProps, { theme: Theme }>({
69
- getInitialState: ({ injector }) => ({
70
- theme: injector.getInstance(ThemeProviderService).theme.getValue(),
71
- }),
72
- resources: ({ injector, updateState }) => [
73
- injector.getInstance(ThemeProviderService).theme.subscribe((theme) => updateState({ theme })),
74
- ],
70
+ export const Button = Shade<ButtonProps>({
75
71
  constructed: ({ element }) => {
76
72
  /**
77
73
  * @param this The Document instance
78
74
  * @param ev The Mouse event
79
75
  */
80
76
  function mouseUp(this: Document, ev: MouseEvent) {
81
- if (ev.target === element.firstElementChild) {
77
+ if (ev.target === element) {
82
78
  promisifyAnimation(
83
- element.firstChild as Element,
79
+ element,
84
80
  [
85
81
  {
86
82
  filter: 'drop-shadow(1px 1px 10px rgba(0,0,0,.5))brightness(1)',
@@ -99,13 +95,28 @@ export const Button = Shade<ButtonProps, { theme: Theme }>({
99
95
  }
100
96
  },
101
97
  shadowDomName: 'shade-button',
102
- render: ({ props, children, getState, injector, element }) => {
98
+ render: ({ props, children, injector, element, useDisposable }) => {
103
99
  const mouseDownHandler = props.onmousedown
104
100
  const mouseUpHandler = props.onmouseup
105
- const { theme } = getState()
106
101
  const themeProvider = injector.getInstance(ThemeProviderService)
102
+ const { theme } = themeProvider
107
103
  const background = getBackground(props, theme)
108
104
 
105
+ if (props.variant === 'contained') {
106
+ useDisposable('themeChanged', () =>
107
+ Trace.method({
108
+ object: themeProvider,
109
+ method: themeProvider.set,
110
+ onFinished: () => {
111
+ const el = element
112
+ el.style.color = getTextColor(props, themeProvider.theme, () =>
113
+ themeProvider.getTextColor(el.style.background || el.style.backgroundColor),
114
+ )
115
+ },
116
+ }),
117
+ )
118
+ }
119
+
109
120
  const hoveredBackground = getHoveredBackground(props, theme, () => {
110
121
  const { r, g, b } = themeProvider.getRgbFromColorString(
111
122
  (props.color && theme.palette[props.color].main) || theme.text.primary,
@@ -114,85 +125,84 @@ export const Button = Shade<ButtonProps, { theme: Theme }>({
114
125
  })
115
126
  const boxShadow = getBoxShadow(props, theme)
116
127
  const hoveredBoxShadow = getHoveredBoxShadow(props, theme)
117
- const textColor = getTextColor(props, theme, () => themeProvider.getTextColor(background))
118
- const hoveredTextColor = getHoveredTextColor(props, theme, () => themeProvider.getTextColor(background))
128
+ const getTextColorInner = () => getTextColor(props, theme, () => themeProvider.getTextColor(background))
129
+ const getHoveredTextColorInner = () =>
130
+ getHoveredTextColor(props, theme, () => themeProvider.getTextColor(background))
119
131
 
120
132
  const tryAnimate = async (
121
133
  keyframes: PropertyIndexedKeyframes | Keyframe[] | null,
122
134
  options?: number | KeyframeAnimationOptions | undefined,
123
135
  ) => {
124
- const el = element.firstElementChild
136
+ const el = element
125
137
  el && promisifyAnimation(el, keyframes, options)
126
138
  }
127
139
 
128
- return (
129
- <button
130
- onmousedown={function (ev) {
131
- mouseDownHandler?.call(this, ev)
132
- tryAnimate(
133
- [
134
- {
135
- filter: 'drop-shadow(-1px -1px 3px black)brightness(0.5)',
136
- transform: 'scale(0.98)',
137
- },
138
- ],
139
- { duration: 150, fill: 'forwards', easing: 'cubic-bezier(0.230, 1.000, 0.320, 1.000)' },
140
- )
141
- }}
142
- onmouseup={function (ev) {
143
- mouseUpHandler?.call(this, ev)
144
- }}
145
- onmouseenter={() => {
146
- {
147
- tryAnimate(
148
- [
149
- {
150
- background,
151
- boxShadow,
152
- color: textColor,
153
- },
154
- {
155
- background: hoveredBackground,
156
- boxShadow: hoveredBoxShadow,
157
- color: hoveredTextColor,
158
- },
159
- ],
160
- { duration: 500, fill: 'forwards', easing: 'cubic-bezier(0.215, 0.610, 0.355, 1.000)' },
161
- )
162
- }
163
- }}
164
- onmouseout={() => {
165
- tryAnimate(
166
- [
167
- { background: hoveredBackground, boxShadow: hoveredBoxShadow, color: hoveredTextColor },
168
- { background, boxShadow, color: textColor },
169
- ],
140
+ attachProps(element, {
141
+ ...props,
142
+ onmousedown(this: HTMLElement, ev: MouseEvent) {
143
+ mouseDownHandler?.call(this, ev)
144
+ tryAnimate(
145
+ [
146
+ {
147
+ filter: 'drop-shadow(-1px -1px 3px black)brightness(0.5)',
148
+ transform: 'scale(0.98)',
149
+ },
150
+ ],
151
+ { duration: 150, fill: 'forwards', easing: 'cubic-bezier(0.230, 1.000, 0.320, 1.000)' },
152
+ )
153
+ },
154
+ onmouseup(this: HTMLElement, ev: MouseEvent) {
155
+ mouseUpHandler?.call(this, ev)
156
+ },
157
+ onmouseenter: () => {
158
+ tryAnimate(
159
+ [
160
+ {
161
+ background,
162
+ boxShadow,
163
+ color: getTextColorInner(),
164
+ },
170
165
  {
171
- duration: 500,
172
- fill: 'forwards',
173
- easing: 'cubic-bezier(0.215, 0.610, 0.355, 1.000)',
166
+ background: hoveredBackground,
167
+ boxShadow: hoveredBoxShadow,
168
+ color: getHoveredTextColorInner(),
174
169
  },
175
- )
176
- }}
177
- {...props}
178
- style={{
179
- cursor: props.disabled ? 'not-allowed' : 'pointer',
180
- background,
181
- boxShadow,
182
- margin: '8px',
183
- padding: '6px 16px',
184
- border: 'none',
185
- borderRadius: '4px',
186
- textTransform: 'uppercase',
187
- color: textColor,
188
- filter: 'drop-shadow(1px 1px 10px rgba(0,0,0,.5))',
189
- backdropFilter: props.variant === 'outlined' ? 'blur(35px)' : undefined,
190
- userSelect: 'none',
191
- ...props.style,
192
- }}
193
- >
194
- {children}
195
- </button>
196
- )
170
+ ],
171
+ { duration: 500, fill: 'forwards', easing: 'cubic-bezier(0.215, 0.610, 0.355, 1.000)' },
172
+ )
173
+ },
174
+ onmouseout: () => {
175
+ tryAnimate(
176
+ [
177
+ { background: hoveredBackground, boxShadow: hoveredBoxShadow, color: getHoveredTextColorInner() },
178
+ { background, boxShadow, color: getTextColorInner() },
179
+ ],
180
+ {
181
+ duration: 500,
182
+ fill: 'forwards',
183
+ easing: 'cubic-bezier(0.215, 0.610, 0.355, 1.000)',
184
+ },
185
+ )
186
+ },
187
+ ...props,
188
+ style: {
189
+ display: 'inline-flex',
190
+ cursor: props.disabled ? 'not-allowed' : 'pointer',
191
+ background,
192
+ boxShadow,
193
+ margin: '8px',
194
+ padding: '6px 16px',
195
+ border: 'none',
196
+ borderRadius: '4px',
197
+ textTransform: 'uppercase',
198
+ color: getTextColorInner(),
199
+ filter: 'drop-shadow(1px 1px 10px rgba(0,0,0,.5))',
200
+ backdropFilter: props.variant === 'outlined' ? 'blur(35px)' : undefined,
201
+ userSelect: 'none',
202
+ ...props.style,
203
+ },
204
+ })
205
+
206
+ return <>{children}</>
197
207
  },
198
208
  })
@@ -1,13 +1,18 @@
1
1
  import { Shade, createComponent } from '@furystack/shades'
2
+ import { ThemeProviderService } from '../../services'
2
3
  import { promisifyAnimation } from '../../utils/promisify-animation'
3
4
  import type { CommandPaletteManager } from './command-palette-manager'
4
5
 
5
- export const CommandPaletteInput = Shade<{ manager: CommandPaletteManager }, { isOpened: boolean }>({
6
- getInitialState: ({ props }) => ({ isOpened: props.manager.isOpened.getValue() }),
7
- constructed: ({ element, props }) => {
6
+ export const CommandPaletteInput = Shade<{ manager: CommandPaletteManager }>({
7
+ shadowDomName: 'shades-command-palette-input',
8
+ render: ({ element, props, injector, useObservable }) => {
9
+ const { theme } = injector.getInstance(ThemeProviderService)
8
10
  const { manager } = props
9
- const subscriptions = [
10
- manager.isOpened.subscribe(async (isOpened) => {
11
+
12
+ useObservable(
13
+ 'isOpened',
14
+ manager.isOpened,
15
+ async (isOpened) => {
11
16
  const input = element.firstChild as HTMLInputElement
12
17
  if (isOpened) {
13
18
  input.value = ''
@@ -25,20 +30,17 @@ export const CommandPaletteInput = Shade<{ manager: CommandPaletteManager }, { i
25
30
  })
26
31
  input.value = ''
27
32
  }
28
- }),
29
- ]
30
- return () => subscriptions.map((s) => s.dispose())
31
- },
32
- shadowDomName: 'shades-command-palette-input',
33
- render: ({ element, props }) => {
34
- const { manager } = props
33
+ },
34
+ true,
35
+ )
36
+
35
37
  element.style.width = manager.isOpened.getValue() ? '100%' : '0%'
36
38
  element.style.overflow = 'hidden'
37
39
  return (
38
40
  <input
39
41
  autofocus
40
42
  style={{
41
- color: 'white',
43
+ color: theme.text.primary,
42
44
  outline: 'none',
43
45
  padding: '1em',
44
46
  background: 'transparent',