playbook_ui 13.31.0.pre.alpha.PLAY882formpillprimaryandneutral3201 → 13.31.0.pre.alpha.PLAY10863202
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.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +5 -108
- data/app/pb_kits/playbook/pb_form_pill/_form_pill.tsx +2 -11
- data/app/pb_kits/playbook/pb_form_pill/form_pill.html.erb +1 -1
- data/app/pb_kits/playbook/pb_form_pill/form_pill.rb +1 -5
- data/app/pb_kits/playbook/pb_table/_table.tsx +1 -1
- data/app/pb_kits/playbook/pb_table/index.ts +4 -4
- data/app/pb_kits/playbook/pb_table/subcomponents/_table_body.tsx +1 -1
- data/app/pb_kits/playbook/pb_table/subcomponents/_table_cell.tsx +1 -1
- data/app/pb_kits/playbook/pb_table/subcomponents/_table_head.tsx +1 -1
- data/app/pb_kits/playbook/pb_table/subcomponents/_table_header.tsx +1 -1
- data/app/pb_kits/playbook/pb_table/subcomponents/_table_row.tsx +1 -1
- data/app/pb_kits/playbook/pb_table/table.test.js +2 -0
- data/app/pb_kits/playbook/pb_text_input/_text_input.tsx +1 -1
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_default.jsx +1 -1
- data/app/pb_kits/playbook/pb_textarea/_textarea.tsx +45 -27
- data/app/pb_kits/playbook/pb_textarea/index.tsx +3 -3
- data/app/pb_kits/playbook/pb_time/_time.tsx +3 -3
- data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.tsx +1 -1
- data/app/pb_kits/playbook/pb_timeline/_item.tsx +1 -1
- data/app/pb_kits/playbook/pb_timeline/_timeline.tsx +1 -1
- data/app/pb_kits/playbook/pb_title/_title.tsx +2 -1
- data/app/pb_kits/playbook/pb_title_detail/_title_detail.tsx +10 -10
- data/app/pb_kits/playbook/pb_toggle/_toggle.tsx +1 -1
- data/app/pb_kits/playbook/pb_tooltip/_tooltip.tsx +3 -3
- data/app/pb_kits/playbook/pb_treemap_chart/_treemap_chart.tsx +3 -4
- data/app/pb_kits/playbook/pb_treemap_chart/treemapChart.test.js +2 -0
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +5 -4
- data/app/pb_kits/playbook/pb_typeahead/components/ClearIndicator.tsx +12 -4
- data/app/pb_kits/playbook/pb_typeahead/components/Control.tsx +11 -7
- data/app/pb_kits/playbook/pb_typeahead/components/IndicatorsContainer.tsx +8 -3
- data/app/pb_kits/playbook/pb_typeahead/components/MenuList.tsx +6 -1
- data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.tsx +26 -21
- data/app/pb_kits/playbook/pb_typeahead/components/Option.tsx +21 -6
- data/app/pb_kits/playbook/pb_typeahead/components/Placeholder.tsx +13 -6
- data/app/pb_kits/playbook/pb_typeahead/components/ValueContainer.tsx +7 -3
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_custom_menu_list.jsx +2 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_highlight.jsx +7 -1
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async.jsx +2 -2
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async_custom_options.jsx +1 -1
- data/app/pb_kits/playbook/pb_typeahead/index.ts +33 -33
- data/app/pb_kits/playbook/pb_user/_user.tsx +1 -1
- data/app/pb_kits/playbook/pb_user_badge/_user_badge.tsx +6 -6
- data/app/pb_kits/playbook/pb_user_badge/badges/million-dollar.tsx +236 -235
- data/app/pb_kits/playbook/pb_user_badge/badges/veteran.tsx +1 -1
- data/app/pb_kits/playbook/pb_walkthrough/_walkthrough.tsx +68 -63
- data/app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.tsx +2 -2
- data/dist/playbook-rails.js +2 -2
- data/lib/playbook/version.rb +1 -1
- metadata +1 -2
- data/app/pb_kits/playbook/pb_form_pill/_form_pill.test.jsx +0 -53
@@ -42,8 +42,8 @@ type TypeaheadProps = {
|
|
42
42
|
id?: string,
|
43
43
|
label?: string,
|
44
44
|
loadOptions?: string | Noop,
|
45
|
-
getOptionLabel?: string | (() =>
|
46
|
-
getOptionValue?: string | (() =>
|
45
|
+
getOptionLabel?: string | (() => string),
|
46
|
+
getOptionValue?: string | (() => string),
|
47
47
|
name?: string,
|
48
48
|
}
|
49
49
|
|
@@ -77,7 +77,7 @@ const Typeahead = ({
|
|
77
77
|
id,
|
78
78
|
loadOptions = noop,
|
79
79
|
...props
|
80
|
-
}: TypeaheadProps) => {
|
80
|
+
}: TypeaheadProps): React.ReactElement => {
|
81
81
|
const selectProps = {
|
82
82
|
cacheOptions: true,
|
83
83
|
components: {
|
@@ -104,7 +104,8 @@ const Typeahead = ({
|
|
104
104
|
multiKit: '',
|
105
105
|
onCreateOption: null as null,
|
106
106
|
plusIcon: false,
|
107
|
-
|
107
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
108
|
+
onMultiValueClick: (_option: SelectValueType): void => undefined,
|
108
109
|
...props,
|
109
110
|
}
|
110
111
|
|
@@ -1,16 +1,24 @@
|
|
1
1
|
import React, { useEffect } from 'react'
|
2
2
|
import { components } from 'react-select'
|
3
3
|
|
4
|
-
|
4
|
+
type ClearContainerProps = {
|
5
|
+
children: React.ReactNode,
|
6
|
+
selectProps?: {
|
7
|
+
id: string,
|
8
|
+
},
|
9
|
+
clearValue: () => void,
|
10
|
+
}
|
11
|
+
|
12
|
+
const ClearContainer = (props: ClearContainerProps): React.ReactElement => {
|
5
13
|
const { selectProps, clearValue } = props
|
6
14
|
useEffect(() => {
|
7
15
|
document.addEventListener(`pb-typeahead-kit-${selectProps.id}:clear`, clearValue)
|
8
|
-
}, [
|
16
|
+
}, [clearValue, selectProps.id])
|
9
17
|
|
10
18
|
return (
|
11
19
|
<components.ClearIndicator
|
12
|
-
|
13
|
-
|
20
|
+
className="clear_indicator"
|
21
|
+
{...props}
|
14
22
|
/>
|
15
23
|
)
|
16
24
|
}
|
@@ -5,20 +5,24 @@ import Flex from '../../pb_flex/_flex'
|
|
5
5
|
import TextInput from '../../pb_text_input/_text_input'
|
6
6
|
|
7
7
|
type Props = {
|
8
|
-
selectProps:
|
8
|
+
selectProps: {
|
9
|
+
dark?: boolean,
|
10
|
+
label: string,
|
11
|
+
error?: string,
|
12
|
+
},
|
9
13
|
}
|
10
14
|
|
11
|
-
const TypeaheadControl = (props: Props) => (
|
15
|
+
const TypeaheadControl = (props: Props): React.ReactElement => (
|
12
16
|
<div className="pb_typeahead_wrapper">
|
13
17
|
<TextInput
|
14
|
-
|
15
|
-
|
16
|
-
|
18
|
+
dark={props.selectProps.dark}
|
19
|
+
error={props.selectProps.error}
|
20
|
+
label={props.selectProps.label}
|
17
21
|
>
|
18
22
|
<Flex>
|
19
23
|
<components.Control
|
20
|
-
|
21
|
-
|
24
|
+
className="text_input"
|
25
|
+
{...props}
|
22
26
|
/>
|
23
27
|
</Flex>
|
24
28
|
</TextInput>
|
@@ -1,10 +1,15 @@
|
|
1
1
|
import React from 'react'
|
2
2
|
import { components } from 'react-select'
|
3
3
|
|
4
|
-
|
4
|
+
type IndicatorsContainerProps = {
|
5
|
+
children: React.ReactNode,
|
6
|
+
}
|
7
|
+
|
8
|
+
|
9
|
+
const IndicatorsContainer = (props: IndicatorsContainerProps): React.ReactElement => (
|
5
10
|
<components.IndicatorsContainer
|
6
|
-
|
7
|
-
|
11
|
+
className="text_input_indicators"
|
12
|
+
{...props}
|
8
13
|
/>
|
9
14
|
)
|
10
15
|
|
@@ -1,7 +1,12 @@
|
|
1
1
|
import React from 'react'
|
2
2
|
import { components } from 'react-select'
|
3
3
|
|
4
|
-
|
4
|
+
type MenuListProps = {
|
5
|
+
children: React.ReactNode,
|
6
|
+
footer: React.ReactNode,
|
7
|
+
}
|
8
|
+
|
9
|
+
const MenuList = (props: MenuListProps): React.ReactElement => {
|
5
10
|
return (
|
6
11
|
<components.MenuList {...props}>
|
7
12
|
{props.children}
|
@@ -7,12 +7,17 @@ import { SelectValueType } from '../_typeahead'
|
|
7
7
|
|
8
8
|
type Props = {
|
9
9
|
data: SelectValueType,
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
removeProps?: {
|
11
|
+
onClick?: React.MouseEventHandler<HTMLSpanElement>,
|
12
|
+
onMouseDown?: React.MouseEventHandler<HTMLSpanElement>,
|
13
|
+
onTouchEnd?: React.TouchEventHandler<HTMLSpanElement>,
|
14
|
+
},
|
15
|
+
selectProps: {
|
16
|
+
multiKit?: string,
|
17
|
+
},
|
13
18
|
}
|
14
19
|
|
15
|
-
const MultiValue = (props: Props) => {
|
20
|
+
const MultiValue = (props: Props): React.ReactElement => {
|
16
21
|
const { removeProps } = props
|
17
22
|
const { imageUrl, label } = props.data
|
18
23
|
const { multiKit } = props.selectProps
|
@@ -27,36 +32,36 @@ const MultiValue = (props: Props) => {
|
|
27
32
|
|
28
33
|
return (
|
29
34
|
<components.MultiValueContainer
|
30
|
-
|
31
|
-
|
35
|
+
className="text_input_multivalue_container"
|
36
|
+
{...props}
|
32
37
|
>
|
33
38
|
{multiKit === 'badge' &&
|
34
39
|
<Badge
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
40
|
+
closeProps={removeProps}
|
41
|
+
removeIcon
|
42
|
+
text={label}
|
43
|
+
variant="primary"
|
39
44
|
/>
|
40
45
|
}
|
41
46
|
|
42
47
|
{multiKit !== 'badge' && imageUrl &&
|
43
48
|
<FormPill
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
49
|
+
avatarUrl={imageUrl}
|
50
|
+
closeProps={removeProps}
|
51
|
+
marginRight="xs"
|
52
|
+
name={label}
|
53
|
+
size={multiKit === 'smallPill' ? 'small' : ''}
|
54
|
+
text=''
|
50
55
|
/>
|
51
56
|
}
|
52
57
|
|
53
58
|
{multiKit !== 'badge' && !imageUrl &&
|
54
59
|
<FormPill
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
+
closeProps={removeProps}
|
61
|
+
marginRight="xs"
|
62
|
+
name=''
|
63
|
+
size={multiKit === 'smallPill' ? 'small' : ''}
|
64
|
+
text={label}
|
60
65
|
/>
|
61
66
|
}
|
62
67
|
</components.MultiValueContainer>
|
@@ -3,7 +3,22 @@ import { components } from 'react-select'
|
|
3
3
|
|
4
4
|
import User from '../../pb_user/_user'
|
5
5
|
|
6
|
-
|
6
|
+
type OptionProps = {
|
7
|
+
children: React.ReactNode,
|
8
|
+
label?: string,
|
9
|
+
data: {
|
10
|
+
imageUrl?: string,
|
11
|
+
},
|
12
|
+
selectProps: {
|
13
|
+
dark?: boolean,
|
14
|
+
valueComponent?: (data: {
|
15
|
+
imageUrl?: string,
|
16
|
+
}) => React.ReactNode,
|
17
|
+
},
|
18
|
+
}
|
19
|
+
|
20
|
+
|
21
|
+
const Option = (props: OptionProps): React.ReactElement => {
|
7
22
|
const {
|
8
23
|
imageUrl,
|
9
24
|
} = props.data
|
@@ -14,11 +29,11 @@ const Option = (props: any) => {
|
|
14
29
|
<>
|
15
30
|
{!valueComponent && imageUrl &&
|
16
31
|
<User
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
32
|
+
align="left"
|
33
|
+
avatarUrl={imageUrl}
|
34
|
+
dark={props.selectProps.dark}
|
35
|
+
name={props.label}
|
36
|
+
orientation="horizontal"
|
22
37
|
/>
|
23
38
|
}
|
24
39
|
|
@@ -4,19 +4,26 @@ import { components } from 'react-select'
|
|
4
4
|
import Flex from '../../pb_flex/_flex'
|
5
5
|
import Icon from '../../pb_icon/_icon'
|
6
6
|
|
7
|
-
|
7
|
+
type PlaceholderProps = {
|
8
|
+
children: React.ReactNode,
|
9
|
+
selectProps: {
|
10
|
+
plusIcon?: boolean,
|
11
|
+
},
|
12
|
+
}
|
13
|
+
|
14
|
+
const Placeholder = (props: PlaceholderProps): React.ReactElement => (
|
8
15
|
<>
|
9
16
|
<Flex
|
10
|
-
|
11
|
-
|
17
|
+
align="center"
|
18
|
+
className="placeholder"
|
12
19
|
>
|
13
20
|
<components.IndicatorsContainer
|
14
|
-
|
21
|
+
{...props}
|
15
22
|
/>
|
16
23
|
{props.selectProps.plusIcon &&
|
17
24
|
<Icon
|
18
|
-
|
19
|
-
|
25
|
+
className="typeahead-plus-icon"
|
26
|
+
icon="plus"
|
20
27
|
/>
|
21
28
|
}
|
22
29
|
</Flex>
|
@@ -1,10 +1,14 @@
|
|
1
1
|
import React from 'react'
|
2
2
|
import { components } from 'react-select'
|
3
3
|
|
4
|
-
|
4
|
+
type ValueContainerProps = {
|
5
|
+
children: React.ReactNode,
|
6
|
+
}
|
7
|
+
|
8
|
+
const ValueContainer = (props: ValueContainerProps): React.ReactElement => (
|
5
9
|
<components.ValueContainer
|
6
|
-
|
7
|
-
|
10
|
+
className="text_input_value_container"
|
11
|
+
{...props}
|
8
12
|
/>
|
9
13
|
)
|
10
14
|
|
@@ -14,6 +14,12 @@ import {
|
|
14
14
|
Typeahead,
|
15
15
|
} from '../..'
|
16
16
|
|
17
|
+
type TypeAheadWithHighlightProps = {
|
18
|
+
data: {
|
19
|
+
name: String,
|
20
|
+
},
|
21
|
+
};
|
22
|
+
|
17
23
|
const USERS = [
|
18
24
|
{
|
19
25
|
name: "Wade Winningham",
|
@@ -37,7 +43,7 @@ const USERS = [
|
|
37
43
|
},
|
38
44
|
];
|
39
45
|
|
40
|
-
const TypeaheadWithHighlight = (props) => {
|
46
|
+
const TypeaheadWithHighlight = (props: TypeAheadWithHighlightProps) => {
|
41
47
|
const [selectedUser, setSelectedUser] = useState()
|
42
48
|
|
43
49
|
const formatOptionLabel = ({name, territory, title}, {inputValue}) => {
|
@@ -47,8 +47,6 @@ const promiseOptions = (inputValue) =>
|
|
47
47
|
|
48
48
|
const TypeaheadWithPillsAsync = (props) => {
|
49
49
|
const [users, setUsers] = useState([])
|
50
|
-
const handleOnChange = (value) => setUsers(formatUsers(value))
|
51
|
-
const formatValue = (users) => formatUsers(users)
|
52
50
|
const formatUsers = (users) => {
|
53
51
|
const results = () => (users.map((user) => {
|
54
52
|
if (Object.keys(user)[0] === 'name' || Object.keys(user)[1] === 'id'){
|
@@ -59,6 +57,8 @@ const TypeaheadWithPillsAsync = (props) => {
|
|
59
57
|
}))
|
60
58
|
return results()
|
61
59
|
}
|
60
|
+
const handleOnChange = (value) => setUsers(formatUsers(value))
|
61
|
+
const formatValue = (users) => formatUsers(users)
|
62
62
|
|
63
63
|
return (
|
64
64
|
<>
|
@@ -48,7 +48,7 @@ const promiseOptions = (inputValue) =>
|
|
48
48
|
|
49
49
|
const TypeaheadWithPillsAsyncCustomOptions = (props) => {
|
50
50
|
const [users, setUsers] = useState([])
|
51
|
-
const handleOnChange = (value) => setUsers(value)
|
51
|
+
const handleOnChange = (value) => {setUsers(value)}
|
52
52
|
|
53
53
|
/**
|
54
54
|
*
|
@@ -4,24 +4,24 @@ import { debounce } from 'lodash'
|
|
4
4
|
export default class PbTypeahead extends PbEnhancedElement {
|
5
5
|
_searchInput: HTMLInputElement
|
6
6
|
_resultsElement: HTMLElement
|
7
|
-
_debouncedSearch:
|
7
|
+
_debouncedSearch: () => void
|
8
8
|
_resultsLoadingIndicator: HTMLElement
|
9
9
|
_resultOptionTemplate: HTMLElement
|
10
10
|
_resultsOptionCache: Map<string, Array<DocumentFragment>>
|
11
11
|
_searchContext: string
|
12
12
|
|
13
|
-
static get selector() {
|
13
|
+
static get selector(): string {
|
14
14
|
return '[data-pb-typeahead-kit]'
|
15
15
|
}
|
16
16
|
|
17
|
-
connect() {
|
17
|
+
connect(): void {
|
18
18
|
this.element.addEventListener('keydown', (event: KeyboardEvent) => this.handleKeydown(event))
|
19
|
-
this.searchInput.addEventListener('focus', () => this.debouncedSearch
|
20
|
-
this.searchInput.addEventListener('input', () => this.debouncedSearch
|
19
|
+
this.searchInput.addEventListener('focus', () => this.debouncedSearch)
|
20
|
+
this.searchInput.addEventListener('input', () => this.debouncedSearch)
|
21
21
|
this.resultsElement.addEventListener('click', (event: MouseEvent) => this.optionSelected(event))
|
22
22
|
}
|
23
23
|
|
24
|
-
handleKeydown(event: KeyboardEvent) {
|
24
|
+
handleKeydown(event: KeyboardEvent): void {
|
25
25
|
if (event.key === 'ArrowUp') {
|
26
26
|
event.preventDefault()
|
27
27
|
this.focusPreviousOption()
|
@@ -31,7 +31,7 @@ export default class PbTypeahead extends PbEnhancedElement {
|
|
31
31
|
}
|
32
32
|
}
|
33
33
|
|
34
|
-
search() {
|
34
|
+
search(): void {
|
35
35
|
if (this.searchTerm.length < parseInt(this.searchTermMinimumLength)) return this.clearResults()
|
36
36
|
|
37
37
|
this.toggleResultsLoadingIndicator(true)
|
@@ -49,7 +49,7 @@ export default class PbTypeahead extends PbEnhancedElement {
|
|
49
49
|
this.element.dispatchEvent(new CustomEvent('pb-typeahead-kit-search', { bubbles: true, detail: search }))
|
50
50
|
}
|
51
51
|
|
52
|
-
resultsCacheUpdate(searchTerm: string, searchContext: string, results: Array<DocumentFragment>) {
|
52
|
+
resultsCacheUpdate(searchTerm: string, searchContext: string, results: Array<DocumentFragment>): void {
|
53
53
|
const searchTermAndContext = this.cacheKeyFor(searchTerm, searchContext)
|
54
54
|
if (this.resultsOptionCache.has(searchTermAndContext)) this.resultsOptionCache.delete(searchTermAndContext)
|
55
55
|
if (this.resultsOptionCache.size > 32) this.resultsOptionCache.delete(this.resultsOptionCache.keys().next().value)
|
@@ -58,18 +58,18 @@ export default class PbTypeahead extends PbEnhancedElement {
|
|
58
58
|
this.showResults()
|
59
59
|
}
|
60
60
|
|
61
|
-
resultsCacheClear() {
|
61
|
+
resultsCacheClear(): void {
|
62
62
|
this.resultsOptionCache.clear()
|
63
63
|
}
|
64
64
|
|
65
|
-
get debouncedSearch() {
|
65
|
+
get debouncedSearch(): void {
|
66
66
|
return this._debouncedSearch = (
|
67
67
|
this._debouncedSearch ||
|
68
68
|
debounce(this.search, parseInt(this.searchDebounceTimeout)).bind(this)
|
69
69
|
)
|
70
70
|
}
|
71
71
|
|
72
|
-
showResults() {
|
72
|
+
showResults(): void {
|
73
73
|
if (!this.resultsOptionCache.has(this.searchTermAndContext)) return
|
74
74
|
|
75
75
|
this.toggleResultsLoadingIndicator(false)
|
@@ -82,7 +82,7 @@ export default class PbTypeahead extends PbEnhancedElement {
|
|
82
82
|
}
|
83
83
|
}
|
84
84
|
|
85
|
-
optionSelected(event: MouseEvent) {
|
85
|
+
optionSelected(event: MouseEvent): void {
|
86
86
|
const resultOption = (event.target as Element).closest('[data-result-option-item]')
|
87
87
|
if (!resultOption) return
|
88
88
|
|
@@ -93,17 +93,17 @@ export default class PbTypeahead extends PbEnhancedElement {
|
|
93
93
|
this.element.dispatchEvent(new CustomEvent('pb-typeahead-kit-result-option-selected', { bubbles: true, detail: { selected: resultOption, typeahead: this } }))
|
94
94
|
}
|
95
95
|
|
96
|
-
clearResults() {
|
96
|
+
clearResults(): void {
|
97
97
|
this.resultsElement.innerHTML = ''
|
98
98
|
}
|
99
99
|
|
100
|
-
newResultOption(content: DocumentFragment) {
|
100
|
+
newResultOption(content: DocumentFragment | Node): Element {
|
101
101
|
const resultOption = (this.resultOptionTemplate as HTMLTemplateElement).content.cloneNode(true) as Element
|
102
102
|
resultOption.querySelector('slot[name="content"]').replaceWith(content)
|
103
103
|
return resultOption
|
104
104
|
}
|
105
105
|
|
106
|
-
focusPreviousOption() {
|
106
|
+
focusPreviousOption(): void {
|
107
107
|
const currentIndex = this.resultOptionItems.indexOf(this.currentSelectedResultOptionItem)
|
108
108
|
const previousIndex = currentIndex - 1
|
109
109
|
const previousOptionItem = (
|
@@ -113,7 +113,7 @@ export default class PbTypeahead extends PbEnhancedElement {
|
|
113
113
|
(previousOptionItem as HTMLElement).focus()
|
114
114
|
}
|
115
115
|
|
116
|
-
focusNextOption() {
|
116
|
+
focusNextOption(): void {
|
117
117
|
const currentIndex = this.resultOptionItems.indexOf(this.currentSelectedResultOptionItem)
|
118
118
|
const nextIndex = currentIndex + 1
|
119
119
|
const nextOptionItem = (
|
@@ -123,23 +123,23 @@ export default class PbTypeahead extends PbEnhancedElement {
|
|
123
123
|
(nextOptionItem as HTMLElement).focus()
|
124
124
|
}
|
125
125
|
|
126
|
-
get resultOptionItems() {
|
126
|
+
get resultOptionItems(): HTMLElement[] {
|
127
127
|
return Array.from(this.resultsElement.querySelectorAll('[data-result-option-item]'))
|
128
128
|
}
|
129
129
|
|
130
|
-
get currentSelectedResultOptionItem() {
|
130
|
+
get currentSelectedResultOptionItem(): HTMLElement | null {
|
131
131
|
return document.activeElement.closest('[data-result-option-item]')
|
132
132
|
}
|
133
133
|
|
134
|
-
get searchInput() {
|
134
|
+
get searchInput(): HTMLInputElement | null {
|
135
135
|
return this._searchInput = (this._searchInput || this.element.querySelector('input[type="search"]'))
|
136
136
|
}
|
137
137
|
|
138
|
-
get searchTerm() {
|
138
|
+
get searchTerm(): string {
|
139
139
|
return this.searchInput.value
|
140
140
|
}
|
141
141
|
|
142
|
-
get searchContext() {
|
142
|
+
get searchContext(): string | null {
|
143
143
|
if (this._searchContext) return this._searchContext
|
144
144
|
|
145
145
|
const selector = (this.element as HTMLElement).dataset.searchContextValueSelector
|
@@ -151,57 +151,57 @@ export default class PbTypeahead extends PbEnhancedElement {
|
|
151
151
|
return null
|
152
152
|
}
|
153
153
|
|
154
|
-
set searchContext(value) {
|
154
|
+
set searchContext(value: string) {
|
155
155
|
this._searchContext = value
|
156
156
|
}
|
157
157
|
|
158
|
-
get searchTermAndContext() {
|
158
|
+
get searchTermAndContext(): string {
|
159
159
|
return this.cacheKeyFor(this.searchTerm, this.searchContext)
|
160
160
|
}
|
161
161
|
|
162
|
-
cacheKeyFor(searchTerm: string, searchContext: string) {
|
162
|
+
cacheKeyFor(searchTerm: string, searchContext: string): string {
|
163
163
|
return [searchTerm, JSON.stringify(searchContext)].join()
|
164
164
|
}
|
165
165
|
|
166
|
-
searchInputClear() {
|
166
|
+
searchInputClear(): void {
|
167
167
|
this.searchInput.value = ''
|
168
168
|
}
|
169
169
|
|
170
|
-
get searchTermMinimumLength() {
|
170
|
+
get searchTermMinimumLength(): string | undefined {
|
171
171
|
return (this.element as HTMLElement).dataset.pbTypeaheadKitSearchTermMinimumLength
|
172
172
|
}
|
173
173
|
|
174
|
-
get searchDebounceTimeout() {
|
174
|
+
get searchDebounceTimeout(): string | undefined {
|
175
175
|
return (this.element as HTMLElement).dataset.pbTypeaheadKitSearchDebounceTimeout
|
176
176
|
}
|
177
177
|
|
178
|
-
get resultsElement() {
|
178
|
+
get resultsElement(): HTMLElement | null {
|
179
179
|
return this._resultsElement = (this._resultsElement || this.element.querySelector('[data-pb-typeahead-kit-results]'))
|
180
180
|
}
|
181
181
|
|
182
|
-
get resultOptionTemplate() {
|
182
|
+
get resultOptionTemplate(): HTMLElement | null {
|
183
183
|
return this._resultOptionTemplate = (
|
184
184
|
this._resultOptionTemplate ||
|
185
185
|
this.element.querySelector('template[data-pb-typeahead-kit-result-option]')
|
186
186
|
)
|
187
187
|
}
|
188
188
|
|
189
|
-
get resultsOptionCache() {
|
189
|
+
get resultsOptionCache(): Map<string, Array<DocumentFragment>> {
|
190
190
|
return this._resultsOptionCache = (
|
191
191
|
this._resultsOptionCache ||
|
192
192
|
new Map
|
193
193
|
)
|
194
194
|
}
|
195
195
|
|
196
|
-
get resultsLoadingIndicator() {
|
196
|
+
get resultsLoadingIndicator(): HTMLElement | null {
|
197
197
|
return this._resultsLoadingIndicator = (
|
198
198
|
this._resultsLoadingIndicator ||
|
199
199
|
this.element.querySelector('[data-pb-typeahead-kit-loading-indicator]')
|
200
200
|
)
|
201
201
|
}
|
202
202
|
|
203
|
-
toggleResultsLoadingIndicator(visible: boolean) {
|
204
|
-
|
203
|
+
toggleResultsLoadingIndicator(visible: boolean): void {
|
204
|
+
let visibilityProperty = '0'
|
205
205
|
if (visible) visibilityProperty = '1'
|
206
206
|
this.resultsLoadingIndicator.style.opacity = visibilityProperty
|
207
207
|
}
|
@@ -15,7 +15,7 @@ type UserBadgeProps = {
|
|
15
15
|
size?: "sm" | "md" | "lg",
|
16
16
|
}
|
17
17
|
|
18
|
-
const UserBadge = (props: UserBadgeProps) => {
|
18
|
+
const UserBadge = (props: UserBadgeProps): React.ReactElement => {
|
19
19
|
const {
|
20
20
|
aria = {},
|
21
21
|
badge = 'million-dollar',
|
@@ -38,11 +38,11 @@ const UserBadge = (props: UserBadgeProps) => {
|
|
38
38
|
|
39
39
|
return (
|
40
40
|
<div
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
41
|
+
{...ariaProps}
|
42
|
+
{...dataProps}
|
43
|
+
{...htmlProps}
|
44
|
+
className={classes}
|
45
|
+
id={id}
|
46
46
|
>
|
47
47
|
<div className="pb_user_badge_wrapper">
|
48
48
|
{image}
|