@furystack/shades-common-components 6.0.0 → 7.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 (42) hide show
  1. package/esm/components/command-palette/command-palette-input.d.ts.map +1 -1
  2. package/esm/components/command-palette/command-palette-input.js +26 -23
  3. package/esm/components/command-palette/command-palette-input.js.map +1 -1
  4. package/esm/components/command-palette/command-palette-suggestion-list.d.ts.map +1 -1
  5. package/esm/components/command-palette/command-palette-suggestion-list.js +33 -29
  6. package/esm/components/command-palette/command-palette-suggestion-list.js.map +1 -1
  7. package/esm/components/command-palette/index.d.ts.map +1 -1
  8. package/esm/components/command-palette/index.js +48 -44
  9. package/esm/components/command-palette/index.js.map +1 -1
  10. package/esm/components/data-grid/data-grid-row.d.ts.map +1 -1
  11. package/esm/components/data-grid/data-grid-row.js +37 -33
  12. package/esm/components/data-grid/data-grid-row.js.map +1 -1
  13. package/esm/components/data-grid/header.d.ts.map +1 -1
  14. package/esm/components/data-grid/header.js +28 -22
  15. package/esm/components/data-grid/header.js.map +1 -1
  16. package/esm/components/data-grid/selection-cell.d.ts.map +1 -1
  17. package/esm/components/data-grid/selection-cell.js +5 -3
  18. package/esm/components/data-grid/selection-cell.js.map +1 -1
  19. package/esm/components/inputs/input.js +1 -1
  20. package/esm/components/inputs/input.js.map +1 -1
  21. package/esm/components/suggest/suggest-input.d.ts.map +1 -1
  22. package/esm/components/suggest/suggest-input.js +12 -9
  23. package/esm/components/suggest/suggest-input.js.map +1 -1
  24. package/esm/components/suggest/suggest-manager.js +2 -2
  25. package/esm/components/suggest/suggest-manager.js.map +1 -1
  26. package/esm/components/suggest/suggestion-list.js +32 -27
  27. package/esm/components/suggest/suggestion-list.js.map +1 -1
  28. package/esm/services/collection-service.d.ts.map +1 -1
  29. package/esm/services/collection-service.js +2 -1
  30. package/esm/services/collection-service.js.map +1 -1
  31. package/package.json +5 -5
  32. package/src/components/command-palette/command-palette-input.tsx +26 -28
  33. package/src/components/command-palette/command-palette-suggestion-list.tsx +42 -38
  34. package/src/components/command-palette/index.tsx +55 -51
  35. package/src/components/data-grid/data-grid-row.tsx +6 -7
  36. package/src/components/data-grid/header.tsx +27 -21
  37. package/src/components/data-grid/selection-cell.tsx +4 -2
  38. package/src/components/inputs/input.tsx +1 -1
  39. package/src/components/suggest/suggest-input.tsx +4 -6
  40. package/src/components/suggest/suggest-manager.ts +2 -2
  41. package/src/components/suggest/suggestion-list.tsx +32 -32
  42. package/src/services/collection-service.ts +2 -1
@@ -61,14 +61,16 @@ export const OrderButton = Shade<{ collectionService: CollectionService<any>; fi
61
61
  const SearchButton = Shade<{ service: CollectionService<any>; fieldName: string; onclick: () => void }>({
62
62
  shadowDomName: 'data-grid-search-button',
63
63
  render: ({ props, useObservable, element }) => {
64
- const [queryState] = useObservable('currentFilterState', props.service.querySettings, (currentQueryState) => {
65
- const currentValue = (currentQueryState.filter?.[props.fieldName] as any)?.$regex || ''
64
+ const [queryState] = useObservable('currentFilterState', props.service.querySettings, {
65
+ onChange: (currentQueryState) => {
66
+ const currentValue = (currentQueryState.filter?.[props.fieldName] as any)?.$regex || ''
66
67
 
67
- const button = element.querySelector('button') as HTMLInputElement
68
- button.innerHTML = currentValue ? '🔍' : '🔎'
69
- button.style.textShadow = currentValue
70
- ? '1px 1px 20px rgba(235,225,45,0.9), 1px 1px 12px rgba(235,225,45,0.9), 0px 0px 3px rgba(255,200,145,0.6)'
71
- : 'none'
68
+ const button = element.querySelector('button') as HTMLInputElement
69
+ button.innerHTML = currentValue ? '🔍' : '🔎'
70
+ button.style.textShadow = currentValue
71
+ ? '1px 1px 20px rgba(235,225,45,0.9), 1px 1px 12px rgba(235,225,45,0.9), 0px 0px 3px rgba(255,200,145,0.6)'
72
+ : 'none'
73
+ },
72
74
  })
73
75
 
74
76
  const filterValue = (queryState.filter as any)?.[props.fieldName]?.$regex || ''
@@ -100,9 +102,11 @@ const SearchForm = Shade<{
100
102
  render: ({ props, useObservable, element }) => {
101
103
  type SearchSubmitType = { searchValue: string }
102
104
 
103
- const [queryState] = useObservable('currentFilterState', props.service.querySettings, (currentQueryState) => {
104
- const currentValue = (currentQueryState.filter?.[props.fieldName] as any)?.$regex || ''
105
- ;(element.querySelector('input') as HTMLInputElement).value = currentValue
105
+ const [queryState] = useObservable('currentFilterState', props.service.querySettings, {
106
+ onChange: (currentQueryState) => {
107
+ const currentValue = (currentQueryState.filter?.[props.fieldName] as any)?.$regex || ''
108
+ ;(element.querySelector('input') as HTMLInputElement).value = currentValue
109
+ },
106
110
  })
107
111
 
108
112
  return (
@@ -157,17 +161,19 @@ export const DataGridHeader: <T, K extends keyof T>(
157
161
  ) => JSX.Element<any> = Shade<DataGridHeaderProps<any, any>>({
158
162
  shadowDomName: 'data-grid-header',
159
163
  render: ({ props, element, useObservable }) => {
160
- const [, setIsSearchOpened] = useObservable('isSearchOpened', new ObservableValue(false), (newValue) => {
161
- const searchForm = element.querySelector('.search-form') as HTMLElement
162
- const headerContent = element.querySelector('.header-content') as HTMLElement
163
- if (!newValue) {
164
- collapse(searchForm)
165
- expand(headerContent)
166
- } else {
167
- searchForm.style.display = 'flex'
168
- expand(searchForm).then(() => searchForm.querySelector('input')?.focus())
169
- collapse(headerContent)
170
- }
164
+ const [, setIsSearchOpened] = useObservable('isSearchOpened', new ObservableValue(false), {
165
+ onChange: (newValue) => {
166
+ const searchForm = element.querySelector('.search-form') as HTMLElement
167
+ const headerContent = element.querySelector('.header-content') as HTMLElement
168
+ if (!newValue) {
169
+ collapse(searchForm)
170
+ expand(headerContent)
171
+ } else {
172
+ searchForm.style.display = 'flex'
173
+ expand(searchForm).then(() => searchForm.querySelector('input')?.focus())
174
+ collapse(headerContent)
175
+ }
176
+ },
171
177
  })
172
178
  const updateSearchValue = (value?: string) => {
173
179
  const currentSettings = props.collectionService.querySettings.getValue()
@@ -4,8 +4,10 @@ import type { CollectionService } from '../../services/collection-service.js'
4
4
  export const SelectionCell = Shade<{ entry: any; service: CollectionService<any> }>({
5
5
  shadowDomName: 'shades-data-grid-selection-cell',
6
6
  render: ({ props, useObservable, element }) => {
7
- const [selection] = useObservable('selection', props.service.selection, (newSelection) => {
8
- ;(element.querySelector('input') as HTMLInputElement).checked = newSelection.includes(props.entry)
7
+ const [selection] = useObservable('selection', props.service.selection, {
8
+ onChange: (newSelection) => {
9
+ ;(element.querySelector('input') as HTMLInputElement).checked = newSelection.includes(props.entry)
10
+ },
9
11
  })
10
12
  const isSelected = selection.includes(props.entry)
11
13
 
@@ -226,7 +226,7 @@ export const Input = Shade<TextInputProps>({
226
226
  validity: element.querySelector('input')?.validity || ({} as ValidityState),
227
227
  element,
228
228
  }),
229
- updateState,
229
+ { onChange: updateState },
230
230
  )
231
231
 
232
232
  return (
@@ -11,10 +11,9 @@ export const SuggestInput = Shade<{ manager: SuggestManager<any> }>({
11
11
  render: ({ element, props, useObservable, injector }) => {
12
12
  const { theme } = injector.getInstance(ThemeProviderService)
13
13
 
14
- useObservable(
15
- 'isOpened',
16
- props.manager.isOpened,
17
- (isOpened) => {
14
+ // todo: getLast is eliminated, do we need it?
15
+ useObservable('isOpened', props.manager.isOpened, {
16
+ onChange: (isOpened) => {
18
17
  const input = element.firstChild as HTMLInputElement
19
18
  if (isOpened) {
20
19
  input.focus()
@@ -22,8 +21,7 @@ export const SuggestInput = Shade<{ manager: SuggestManager<any> }>({
22
21
  input.value = ''
23
22
  }
24
23
  },
25
- true,
26
- )
24
+ })
27
25
 
28
26
  return (
29
27
  <input
@@ -30,8 +30,8 @@ export class SuggestManager<T> extends EventHub<'onSelectSuggestion', { onSelect
30
30
  }).bind(this)
31
31
 
32
32
  public dispose() {
33
- window.removeEventListener('keyup', this.keyPressListener)
34
- window.removeEventListener('click', this.clickOutsideListener)
33
+ window.removeEventListener('keyup', this.keyPressListener, true)
34
+ window.removeEventListener('click', this.clickOutsideListener, true)
35
35
  this.isOpened.dispose()
36
36
  this.isLoading.dispose()
37
37
  this.term.dispose()
@@ -13,10 +13,9 @@ export const SuggestionList: <T>(props: { manager: SuggestManager<T> }, children
13
13
 
14
14
  const [suggestions] = useObservable('suggestions', manager.currentSuggestions)
15
15
 
16
- const [selectedIndex] = useObservable(
17
- 'selectedIndex',
18
- manager.selectedIndex,
19
- (idx) => {
16
+ // todo: GetLast is eliminated, do we need it?
17
+ const [selectedIndex] = useObservable('selectedIndex', manager.selectedIndex, {
18
+ onChange: (idx) => {
20
19
  ;([...element.querySelectorAll('.suggestion-item')] as HTMLDivElement[]).map((s, i) => {
21
20
  if (i === idx) {
22
21
  s.style.background = theme.background.paper
@@ -27,35 +26,36 @@ export const SuggestionList: <T>(props: { manager: SuggestManager<T> }, children
27
26
  }
28
27
  })
29
28
  },
30
- true,
31
- )
29
+ })
32
30
 
33
- const [isListOpened] = useObservable('isOpened', manager.isOpened, async (isOpened) => {
34
- const container = element.firstElementChild as HTMLDivElement
35
- if (isOpened) {
36
- container.style.zIndex = '1'
37
- container.style.width = `calc(${Math.round(
38
- element.parentElement?.getBoundingClientRect().width || 200,
39
- )}px - 3em)`
40
- await promisifyAnimation(
41
- container,
42
- [
43
- { opacity: 0, transform: 'translate(0, -50px)' },
44
- { opacity: 1, transform: 'translate(0, 0)' },
45
- ],
46
- { fill: 'forwards', duration: 500 },
47
- )
48
- } else {
49
- await promisifyAnimation(
50
- container,
51
- [
52
- { opacity: 1, transform: 'translate(0, 0)' },
53
- { opacity: 0, transform: 'translate(0, -50px)' },
54
- ],
55
- { fill: 'forwards', duration: 200 },
56
- )
57
- container.style.zIndex = '-1'
58
- }
31
+ const [isListOpened] = useObservable('isOpened', manager.isOpened, {
32
+ onChange: async (isOpened) => {
33
+ const container = element.firstElementChild as HTMLDivElement
34
+ if (isOpened) {
35
+ container.style.zIndex = '1'
36
+ container.style.width = `calc(${Math.round(
37
+ element.parentElement?.getBoundingClientRect().width || 200,
38
+ )}px - 3em)`
39
+ await promisifyAnimation(
40
+ container,
41
+ [
42
+ { opacity: 0, transform: 'translate(0, -50px)' },
43
+ { opacity: 1, transform: 'translate(0, 0)' },
44
+ ],
45
+ { fill: 'forwards', duration: 500 },
46
+ )
47
+ } else {
48
+ await promisifyAnimation(
49
+ container,
50
+ [
51
+ { opacity: 1, transform: 'translate(0, 0)' },
52
+ { opacity: 0, transform: 'translate(0, -50px)' },
53
+ ],
54
+ { fill: 'forwards', duration: 200 },
55
+ )
56
+ container.style.zIndex = '-1'
57
+ }
58
+ },
59
59
  })
60
60
 
61
61
  return (
@@ -217,7 +217,8 @@ export class CollectionService<T> implements Disposable {
217
217
  }
218
218
  }
219
219
 
220
- this.querySettings.subscribe((val) => this.getEntries(val), true)
220
+ this.querySettings.subscribe((val) => this.getEntries(val))
221
+ this.getEntries(this.querySettings.getValue())
221
222
  }
222
223
 
223
224
  public async handleRowDoubleClick(entry: T) {