@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.
- package/esm/components/command-palette/command-palette-input.d.ts.map +1 -1
- package/esm/components/command-palette/command-palette-input.js +26 -23
- package/esm/components/command-palette/command-palette-input.js.map +1 -1
- package/esm/components/command-palette/command-palette-suggestion-list.d.ts.map +1 -1
- package/esm/components/command-palette/command-palette-suggestion-list.js +33 -29
- package/esm/components/command-palette/command-palette-suggestion-list.js.map +1 -1
- package/esm/components/command-palette/index.d.ts.map +1 -1
- package/esm/components/command-palette/index.js +48 -44
- package/esm/components/command-palette/index.js.map +1 -1
- package/esm/components/data-grid/data-grid-row.d.ts.map +1 -1
- package/esm/components/data-grid/data-grid-row.js +37 -33
- package/esm/components/data-grid/data-grid-row.js.map +1 -1
- package/esm/components/data-grid/header.d.ts.map +1 -1
- package/esm/components/data-grid/header.js +28 -22
- package/esm/components/data-grid/header.js.map +1 -1
- package/esm/components/data-grid/selection-cell.d.ts.map +1 -1
- package/esm/components/data-grid/selection-cell.js +5 -3
- package/esm/components/data-grid/selection-cell.js.map +1 -1
- package/esm/components/inputs/input.js +1 -1
- package/esm/components/inputs/input.js.map +1 -1
- package/esm/components/suggest/suggest-input.d.ts.map +1 -1
- package/esm/components/suggest/suggest-input.js +12 -9
- package/esm/components/suggest/suggest-input.js.map +1 -1
- package/esm/components/suggest/suggest-manager.js +2 -2
- package/esm/components/suggest/suggest-manager.js.map +1 -1
- package/esm/components/suggest/suggestion-list.js +32 -27
- package/esm/components/suggest/suggestion-list.js.map +1 -1
- package/esm/services/collection-service.d.ts.map +1 -1
- package/esm/services/collection-service.js +2 -1
- package/esm/services/collection-service.js.map +1 -1
- package/package.json +5 -5
- package/src/components/command-palette/command-palette-input.tsx +26 -28
- package/src/components/command-palette/command-palette-suggestion-list.tsx +42 -38
- package/src/components/command-palette/index.tsx +55 -51
- package/src/components/data-grid/data-grid-row.tsx +6 -7
- package/src/components/data-grid/header.tsx +27 -21
- package/src/components/data-grid/selection-cell.tsx +4 -2
- package/src/components/inputs/input.tsx +1 -1
- package/src/components/suggest/suggest-input.tsx +4 -6
- package/src/components/suggest/suggest-manager.ts +2 -2
- package/src/components/suggest/suggestion-list.tsx +32 -32
- 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,
|
|
65
|
-
|
|
64
|
+
const [queryState] = useObservable('currentFilterState', props.service.querySettings, {
|
|
65
|
+
onChange: (currentQueryState) => {
|
|
66
|
+
const currentValue = (currentQueryState.filter?.[props.fieldName] as any)?.$regex || ''
|
|
66
67
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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,
|
|
104
|
-
|
|
105
|
-
|
|
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),
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
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,
|
|
8
|
-
|
|
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
|
|
|
@@ -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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
-
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
31
|
-
)
|
|
29
|
+
})
|
|
32
30
|
|
|
33
|
-
const [isListOpened] = useObservable('isOpened', manager.isOpened,
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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)
|
|
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) {
|