@veracity/vui 2.11.0 → 2.12.0-beta.1
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/dist/cjs/button/buttonIcon.d.ts.map +1 -1
- package/dist/cjs/button/buttonIcon.js +4 -2
- package/dist/cjs/core/vuiProvider/consts.d.ts +2 -0
- package/dist/cjs/core/vuiProvider/consts.d.ts.map +1 -0
- package/dist/cjs/core/vuiProvider/consts.js +4 -0
- package/dist/cjs/core/vuiProvider/globalStyle.d.ts.map +1 -1
- package/dist/cjs/core/vuiProvider/globalStyle.js +6 -0
- package/dist/cjs/core/vuiProvider/index.d.ts +2 -0
- package/dist/cjs/core/vuiProvider/index.d.ts.map +1 -1
- package/dist/cjs/core/vuiProvider/index.js +2 -0
- package/dist/cjs/core/vuiProvider/useBodyScrollLock.d.ts +7 -0
- package/dist/cjs/core/vuiProvider/useBodyScrollLock.d.ts.map +1 -0
- package/dist/cjs/core/vuiProvider/useBodyScrollLock.js +18 -0
- package/dist/cjs/core/vuiProvider/vuiProvider.d.ts.map +1 -1
- package/dist/cjs/core/vuiProvider/vuiProvider.js +0 -2
- package/dist/cjs/definition/definition.d.ts.map +1 -1
- package/dist/cjs/definition/definition.js +0 -1
- package/dist/cjs/dialog/consts.d.ts +0 -1
- package/dist/cjs/dialog/consts.d.ts.map +1 -1
- package/dist/cjs/dialog/consts.js +1 -2
- package/dist/cjs/focusLock/focusLock.d.ts +11 -0
- package/dist/cjs/focusLock/focusLock.d.ts.map +1 -0
- package/dist/cjs/{modal → focusLock}/focusLock.js +3 -3
- package/dist/cjs/focusLock/focusLock.types.d.ts.map +1 -0
- package/dist/cjs/focusLock/index.d.ts +4 -0
- package/dist/cjs/focusLock/index.d.ts.map +1 -0
- package/dist/cjs/focusLock/index.js +24 -0
- package/dist/cjs/footer/footer.d.ts.map +1 -1
- package/dist/cjs/footer/footer.js +5 -1
- package/dist/cjs/footer/footer.types.d.ts +2 -1
- package/dist/cjs/footer/footer.types.d.ts.map +1 -1
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/input/consts.d.ts +6 -0
- package/dist/cjs/input/consts.d.ts.map +1 -1
- package/dist/cjs/input/consts.js +7 -1
- package/dist/cjs/input/input.d.ts.map +1 -1
- package/dist/cjs/input/input.js +3 -3
- package/dist/cjs/input/input.types.d.ts +2 -0
- package/dist/cjs/input/input.types.d.ts.map +1 -1
- package/dist/cjs/modal/index.d.ts +2 -2
- package/dist/cjs/modal/index.d.ts.map +1 -1
- package/dist/cjs/modal/index.js +2 -2
- package/dist/cjs/modal/modal.d.ts.map +1 -1
- package/dist/cjs/modal/modal.js +1 -1
- package/dist/cjs/modal/modal.types.d.ts +1 -1
- package/dist/cjs/modal/modal.types.d.ts.map +1 -1
- package/dist/cjs/modal/modalManager.d.ts +2 -2
- package/dist/cjs/modal/modalManager.d.ts.map +1 -1
- package/dist/cjs/modal/modalManager.js +6 -9
- package/dist/cjs/sidemenu/sidemenu.d.ts +0 -1
- package/dist/cjs/sidemenu/sidemenu.d.ts.map +1 -1
- package/dist/cjs/sidemenu/sidemenu.js +10 -11
- package/dist/cjs/sidemenu/sidemenu.types.d.ts +4 -0
- package/dist/cjs/sidemenu/sidemenu.types.d.ts.map +1 -1
- package/dist/cjs/sidemenu/sidemenuItem.d.ts.map +1 -1
- package/dist/cjs/sidemenu/sidemenuItem.js +1 -1
- package/dist/cjs/sidemenu/theme.d.ts +3 -1
- package/dist/cjs/sidemenu/theme.d.ts.map +1 -1
- package/dist/cjs/sidemenu/theme.js +3 -1
- package/dist/cjs/theme/components.d.ts +3 -1
- package/dist/cjs/theme/components.d.ts.map +1 -1
- package/dist/cjs/theme/defaultTheme.d.ts +3 -1
- package/dist/cjs/theme/defaultTheme.d.ts.map +1 -1
- package/dist/cjs/utils/index.d.ts +1 -0
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +1 -0
- package/dist/cjs/utils/window.d.ts +2 -0
- package/dist/cjs/utils/window.d.ts.map +1 -0
- package/dist/cjs/utils/window.js +5 -0
- package/dist/esm/button/buttonIcon.d.ts.map +1 -1
- package/dist/esm/button/buttonIcon.js +4 -2
- package/dist/esm/core/vuiProvider/consts.d.ts +2 -0
- package/dist/esm/core/vuiProvider/consts.d.ts.map +1 -0
- package/dist/esm/core/vuiProvider/consts.js +1 -0
- package/dist/esm/core/vuiProvider/globalStyle.d.ts.map +1 -1
- package/dist/esm/core/vuiProvider/globalStyle.js +6 -0
- package/dist/esm/core/vuiProvider/index.d.ts +2 -0
- package/dist/esm/core/vuiProvider/index.d.ts.map +1 -1
- package/dist/esm/core/vuiProvider/index.js +2 -0
- package/dist/esm/core/vuiProvider/useBodyScrollLock.d.ts +7 -0
- package/dist/esm/core/vuiProvider/useBodyScrollLock.d.ts.map +1 -0
- package/dist/esm/core/vuiProvider/useBodyScrollLock.js +14 -0
- package/dist/esm/core/vuiProvider/vuiProvider.d.ts.map +1 -1
- package/dist/esm/core/vuiProvider/vuiProvider.js +0 -2
- package/dist/esm/definition/definition.d.ts.map +1 -1
- package/dist/esm/definition/definition.js +0 -1
- package/dist/esm/dialog/consts.d.ts +0 -1
- package/dist/esm/dialog/consts.d.ts.map +1 -1
- package/dist/esm/dialog/consts.js +0 -1
- package/dist/esm/focusLock/focusLock.d.ts +11 -0
- package/dist/esm/focusLock/focusLock.d.ts.map +1 -0
- package/dist/esm/{modal → focusLock}/focusLock.js +3 -3
- package/dist/esm/focusLock/focusLock.types.d.ts.map +1 -0
- package/dist/esm/focusLock/index.d.ts +4 -0
- package/dist/esm/focusLock/index.d.ts.map +1 -0
- package/dist/esm/focusLock/index.js +3 -0
- package/dist/esm/footer/footer.d.ts.map +1 -1
- package/dist/esm/footer/footer.js +5 -1
- package/dist/esm/footer/footer.types.d.ts +2 -1
- package/dist/esm/footer/footer.types.d.ts.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/input/consts.d.ts +6 -0
- package/dist/esm/input/consts.d.ts.map +1 -1
- package/dist/esm/input/consts.js +6 -0
- package/dist/esm/input/input.d.ts.map +1 -1
- package/dist/esm/input/input.js +4 -4
- package/dist/esm/input/input.types.d.ts +2 -0
- package/dist/esm/input/input.types.d.ts.map +1 -1
- package/dist/esm/modal/index.d.ts +2 -2
- package/dist/esm/modal/index.d.ts.map +1 -1
- package/dist/esm/modal/index.js +2 -2
- package/dist/esm/modal/modal.d.ts.map +1 -1
- package/dist/esm/modal/modal.js +1 -1
- package/dist/esm/modal/modal.types.d.ts +1 -1
- package/dist/esm/modal/modal.types.d.ts.map +1 -1
- package/dist/esm/modal/modalManager.d.ts +2 -2
- package/dist/esm/modal/modalManager.d.ts.map +1 -1
- package/dist/esm/modal/modalManager.js +6 -9
- package/dist/esm/sidemenu/sidemenu.d.ts +0 -1
- package/dist/esm/sidemenu/sidemenu.d.ts.map +1 -1
- package/dist/esm/sidemenu/sidemenu.js +10 -12
- package/dist/esm/sidemenu/sidemenu.types.d.ts +4 -0
- package/dist/esm/sidemenu/sidemenu.types.d.ts.map +1 -1
- package/dist/esm/sidemenu/sidemenuItem.d.ts.map +1 -1
- package/dist/esm/sidemenu/sidemenuItem.js +2 -0
- package/dist/esm/sidemenu/theme.d.ts +3 -1
- package/dist/esm/sidemenu/theme.d.ts.map +1 -1
- package/dist/esm/sidemenu/theme.js +3 -1
- package/dist/esm/theme/components.d.ts +3 -1
- package/dist/esm/theme/components.d.ts.map +1 -1
- package/dist/esm/theme/defaultTheme.d.ts +3 -1
- package/dist/esm/theme/defaultTheme.d.ts.map +1 -1
- package/dist/esm/utils/index.d.ts +1 -0
- package/dist/esm/utils/index.d.ts.map +1 -1
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/window.d.ts +2 -0
- package/dist/esm/utils/window.d.ts.map +1 -0
- package/dist/esm/utils/window.js +1 -0
- package/package.json +1 -1
- package/src/button/buttonIcon.tsx +6 -3
- package/src/core/vuiProvider/consts.ts +1 -0
- package/src/core/vuiProvider/globalStyle.tsx +6 -0
- package/src/core/vuiProvider/index.ts +2 -0
- package/src/core/vuiProvider/useBodyScrollLock.tsx +17 -0
- package/src/core/vuiProvider/vuiProvider.tsx +0 -2
- package/src/definition/definition.tsx +0 -3
- package/src/dialog/consts.ts +0 -2
- package/src/{modal → focusLock}/focusLock.tsx +4 -3
- package/src/focusLock/index.ts +3 -0
- package/src/footer/footer.tsx +29 -1
- package/src/footer/footer.types.ts +2 -1
- package/src/index.ts +1 -0
- package/src/input/consts.ts +7 -0
- package/src/input/input.tsx +66 -55
- package/src/input/input.types.ts +2 -0
- package/src/modal/index.ts +2 -2
- package/src/modal/modal.tsx +1 -2
- package/src/modal/modal.types.ts +1 -1
- package/src/modal/modalManager.ts +6 -9
- package/src/sidemenu/sidemenu.tsx +29 -14
- package/src/sidemenu/sidemenu.types.ts +4 -0
- package/src/sidemenu/sidemenuItem.tsx +2 -0
- package/src/sidemenu/theme.ts +3 -1
- package/src/utils/index.ts +1 -0
- package/src/utils/window.ts +1 -0
- package/dist/cjs/modal/focusLock.d.ts +0 -11
- package/dist/cjs/modal/focusLock.d.ts.map +0 -1
- package/dist/cjs/modal/focusLock.types.d.ts.map +0 -1
- package/dist/cjs/modal/modalStyle.d.ts +0 -3
- package/dist/cjs/modal/modalStyle.d.ts.map +0 -1
- package/dist/cjs/modal/modalStyle.js +0 -10
- package/dist/esm/modal/focusLock.d.ts +0 -11
- package/dist/esm/modal/focusLock.d.ts.map +0 -1
- package/dist/esm/modal/focusLock.types.d.ts.map +0 -1
- package/dist/esm/modal/modalStyle.d.ts +0 -3
- package/dist/esm/modal/modalStyle.d.ts.map +0 -1
- package/dist/esm/modal/modalStyle.js +0 -8
- package/src/modal/modalStyle.ts +0 -9
- /package/dist/cjs/{modal → focusLock}/focusLock.types.d.ts +0 -0
- /package/dist/cjs/{modal → focusLock}/focusLock.types.js +0 -0
- /package/dist/esm/{modal → focusLock}/focusLock.types.d.ts +0 -0
- /package/dist/esm/{modal → focusLock}/focusLock.types.js +0 -0
- /package/src/{modal → focusLock}/focusLock.types.ts +0 -0
package/src/input/input.tsx
CHANGED
|
@@ -4,7 +4,7 @@ import { styled, useStyleConfig, vui, VuiComponent } from '../core'
|
|
|
4
4
|
import { T } from '../t'
|
|
5
5
|
import { ChangeEvent, cs, filterUndefined, isString } from '../utils'
|
|
6
6
|
import AutoCompletePopover from './autoCompletePopover'
|
|
7
|
-
import { inputColors, inputStateMapping } from './consts'
|
|
7
|
+
import { displayValueOnlyTextSize, inputColors, inputStateMapping } from './consts'
|
|
8
8
|
import { InputProvider } from './context'
|
|
9
9
|
import { getInitialCount } from './helpers'
|
|
10
10
|
import HelpText from './helpText'
|
|
@@ -67,7 +67,8 @@ export const Input = vui<'div', InputProps>((props, ref) => {
|
|
|
67
67
|
readOnly,
|
|
68
68
|
required,
|
|
69
69
|
showCount,
|
|
70
|
-
|
|
70
|
+
displayValueOnly,
|
|
71
|
+
size = 'lg',
|
|
71
72
|
state = '',
|
|
72
73
|
stateMapping,
|
|
73
74
|
step,
|
|
@@ -113,59 +114,69 @@ export const Input = vui<'div', InputProps>((props, ref) => {
|
|
|
113
114
|
|
|
114
115
|
return (
|
|
115
116
|
<InputProvider value={context}>
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
{
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
117
|
+
{displayValueOnly ? (
|
|
118
|
+
<T
|
|
119
|
+
className={cs('vui-input-value', className)}
|
|
120
|
+
size={displayValueOnlyTextSize[size] as 'xs' | 'md' | 'sm' | 'lg'}
|
|
121
|
+
>
|
|
122
|
+
{value || defaultValue}
|
|
123
|
+
</T>
|
|
124
|
+
) : (
|
|
125
|
+
<AutoCompletePopover
|
|
126
|
+
autoCompleteMaxHeight={autoCompleteMaxHeight}
|
|
127
|
+
autoCompleteOptions={autoCompleteOptions}
|
|
128
|
+
filterAutoCompleteOptions={filterAutoCompleteOptions}
|
|
129
|
+
onAutoCompleteSelect={onAutoCompleteSelect}
|
|
130
|
+
>
|
|
131
|
+
<InputBase className={cs('vui-input', className)} ref={ref} {...styles.container} {...aliasedProps} {...rest}>
|
|
132
|
+
{itemLeft}
|
|
133
|
+
{isString(iconLeft) ? <InputIcon ml={1} name={iconLeft} /> : iconLeft}
|
|
134
|
+
{children ?? input ?? (
|
|
135
|
+
<InputInput
|
|
136
|
+
ref={inputRef}
|
|
137
|
+
{...{
|
|
138
|
+
autoFocus,
|
|
139
|
+
defaultValue,
|
|
140
|
+
disabled,
|
|
141
|
+
id,
|
|
142
|
+
max,
|
|
143
|
+
maxLength,
|
|
144
|
+
min,
|
|
145
|
+
name,
|
|
146
|
+
onBlur,
|
|
147
|
+
onChange,
|
|
148
|
+
onFocus,
|
|
149
|
+
pattern,
|
|
150
|
+
placeholder,
|
|
151
|
+
readOnly,
|
|
152
|
+
required,
|
|
153
|
+
step,
|
|
154
|
+
type
|
|
155
|
+
}}
|
|
156
|
+
autoComplete={autoCompleteOptions?.length ? 'off' : autoComplete}
|
|
157
|
+
value={valueInternal}
|
|
158
|
+
{...inputProps}
|
|
159
|
+
/>
|
|
160
|
+
)}
|
|
161
|
+
{isString(iconRight) ? <InputIcon mr={1} name={iconRight} /> : iconRight}
|
|
162
|
+
{itemRight}
|
|
163
|
+
{state && <InputIcon mr={1} {...states[state]?.iconProps} />}
|
|
164
|
+
{showCount && (
|
|
165
|
+
<T
|
|
166
|
+
className="vui-inputCount"
|
|
167
|
+
color={maxLength && count > maxLength ? inputColors.error : inputColors.helpText}
|
|
168
|
+
position="absolute"
|
|
169
|
+
right={0}
|
|
170
|
+
size="sm"
|
|
171
|
+
top="calc(100% + 1px)"
|
|
172
|
+
>
|
|
173
|
+
{count} {maxLength ? `/ ${maxLength}` : null}
|
|
174
|
+
</T>
|
|
175
|
+
)}
|
|
176
|
+
</InputBase>
|
|
177
|
+
</AutoCompletePopover>
|
|
178
|
+
)}
|
|
179
|
+
|
|
169
180
|
{!!helpText && <HelpText>{helpText}</HelpText>}
|
|
170
181
|
{!!errorText && <HelpText isError>{errorText}</HelpText>}
|
|
171
182
|
</InputProvider>
|
package/src/input/input.types.ts
CHANGED
|
@@ -68,6 +68,8 @@ export type InputProps = SystemProps &
|
|
|
68
68
|
required?: boolean
|
|
69
69
|
/** Displays length of input value if also using maxLength. */
|
|
70
70
|
showCount?: boolean
|
|
71
|
+
/** Displays the provided value. */
|
|
72
|
+
displayValueOnly?: boolean
|
|
71
73
|
/** Modifies Input style and content based on the given state. */
|
|
72
74
|
state?: InputState
|
|
73
75
|
/** Object definition of styles and content for each state. */
|
package/src/modal/index.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export * from './context'
|
|
2
|
-
export * from '
|
|
3
|
-
export * from '
|
|
2
|
+
export * from '../focusLock/focusLock'
|
|
3
|
+
export * from '../focusLock/focusLock.types'
|
|
4
4
|
export * from './modal'
|
|
5
5
|
export { default as Modal } from './modal'
|
|
6
6
|
export * from './modal.types'
|
package/src/modal/modal.tsx
CHANGED
|
@@ -2,10 +2,10 @@ import React, { cloneElement, useRef } from 'react'
|
|
|
2
2
|
|
|
3
3
|
import Box from '../box'
|
|
4
4
|
import { vui, VuiComponent } from '../core'
|
|
5
|
+
import FocusLock from '../focusLock'
|
|
5
6
|
import Portal from '../portal'
|
|
6
7
|
import { callAll, cs, KeyboardEvent, mergeRefs, MouseEvent } from '../utils'
|
|
7
8
|
import { ModalProvider } from './context'
|
|
8
|
-
import FocusLock from './focusLock'
|
|
9
9
|
import { ModalProps } from './modal.types'
|
|
10
10
|
import ModalBackdrop from './modalBackdrop'
|
|
11
11
|
import ModalContent from './modalContent'
|
|
@@ -95,7 +95,6 @@ export const Modal = vui<'div', ModalProps>((props, ref) => {
|
|
|
95
95
|
onMouseDown={callAll(props.onMouseDown, onMouseDown)}
|
|
96
96
|
>
|
|
97
97
|
{!hideBackdrop && <ModalBackdrop />}
|
|
98
|
-
|
|
99
98
|
<FocusLock
|
|
100
99
|
autoFocus={!disableAutoFocus}
|
|
101
100
|
finalFocusRef={finalFocusRef}
|
package/src/modal/modal.types.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { ReactElement } from 'react'
|
|
2
2
|
|
|
3
|
+
import { FocusableElement } from '../focusLock/focusLock.types'
|
|
3
4
|
import { SystemProps } from '../system'
|
|
4
5
|
import { ThemingProps } from '../theme'
|
|
5
6
|
import { MouseEvent } from '../utils'
|
|
6
|
-
import { FocusableElement } from './focusLock.types'
|
|
7
7
|
|
|
8
8
|
export type ModalBackdropProps = SystemProps
|
|
9
9
|
|
|
@@ -1,18 +1,14 @@
|
|
|
1
1
|
import { Ref, useEffect } from 'react'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { useBodyScrollLock } from '../core'
|
|
4
4
|
|
|
5
5
|
/** State management for nested modals. */
|
|
6
6
|
class ModalManager {
|
|
7
7
|
modals: any[] = []
|
|
8
8
|
|
|
9
|
-
add = (modal: any) =>
|
|
10
|
-
this.modals.push(modal)
|
|
11
|
-
}
|
|
9
|
+
add = (modal: any) => this.modals.push(modal)
|
|
12
10
|
|
|
13
|
-
remove = (modal: any) =>
|
|
14
|
-
this.modals = this.modals.filter(m => m !== modal)
|
|
15
|
-
}
|
|
11
|
+
remove = (modal: any) => (this.modals = this.modals.filter(m => m !== modal))
|
|
16
12
|
|
|
17
13
|
isTopModal = (modal: any) => {
|
|
18
14
|
const topmostModal = this.modals[this.modals.length - 1]
|
|
@@ -24,15 +20,16 @@ export const manager = new ModalManager()
|
|
|
24
20
|
|
|
25
21
|
/** Refs of new modals will be automatically added/removed from the state when rendering. */
|
|
26
22
|
export function useModalManager(ref: Ref<any>, isOpen?: boolean, disableScrollLock?: boolean) {
|
|
23
|
+
const { setIsScrollLocked } = useBodyScrollLock()
|
|
27
24
|
useEffect(() => {
|
|
28
25
|
if (isOpen) {
|
|
29
26
|
manager.add(ref)
|
|
30
|
-
if (!disableScrollLock)
|
|
27
|
+
if (!disableScrollLock) setIsScrollLocked(true)
|
|
31
28
|
}
|
|
32
29
|
|
|
33
30
|
return () => {
|
|
34
31
|
manager.remove(ref)
|
|
35
|
-
if (!disableScrollLock)
|
|
32
|
+
if (!disableScrollLock) setIsScrollLocked(false)
|
|
36
33
|
}
|
|
37
34
|
}, [isOpen, ref])
|
|
38
35
|
}
|
|
@@ -2,26 +2,18 @@ import React, { useEffect, useMemo, useState } from 'react'
|
|
|
2
2
|
|
|
3
3
|
import Box from '../box'
|
|
4
4
|
import Button from '../button'
|
|
5
|
-
import {
|
|
5
|
+
import { useStyleConfig, vui, VuiComponent } from '../core'
|
|
6
6
|
import Icon from '../icon'
|
|
7
|
-
import { cs, filterUndefined } from '../utils'
|
|
7
|
+
import { cs, filterUndefined, isActivePath } from '../utils'
|
|
8
8
|
import { expandedWidth } from './consts'
|
|
9
9
|
import { SidemenuProvider } from './context'
|
|
10
10
|
import { SidemenuItemProps, SidemenuProps } from './sidemenu.types'
|
|
11
11
|
import SidemenuItem from './sidemenuItem'
|
|
12
12
|
import SidemenuTop from './sidemenuTop'
|
|
13
13
|
|
|
14
|
-
export const SidemenuBase = styled.divBox`
|
|
15
|
-
display: flex;
|
|
16
|
-
flex-direction: column;
|
|
17
|
-
min-width: 0;
|
|
18
|
-
transition-duration: normal;
|
|
19
|
-
overflow: hidden;
|
|
20
|
-
`
|
|
21
|
-
|
|
22
14
|
/** A collapsible side menu for navigation. */
|
|
23
15
|
export const Sidemenu = vui<'div', SidemenuProps>((props, ref) => {
|
|
24
|
-
const { children, className, items, isExpanded = false, size, variant, width = 280, ...rest } = props
|
|
16
|
+
const { children, className, items, isExpanded = false, size, variant, width = 280, onNavigate, ...rest } = props
|
|
25
17
|
|
|
26
18
|
const [isExpandedInternal, setIsExpandedInternal] = useState(isExpanded)
|
|
27
19
|
const context = useMemo(
|
|
@@ -43,12 +35,35 @@ export const Sidemenu = vui<'div', SidemenuProps>((props, ref) => {
|
|
|
43
35
|
const icon = `falArrow${isExpandedInternal ? 'Left' : 'Right'}`
|
|
44
36
|
const justifyContent = isExpandedInternal ? 'flex-end' : 'center'
|
|
45
37
|
|
|
38
|
+
function onItemClick(item: SidemenuItemProps) {
|
|
39
|
+
item?.onClick?.()
|
|
40
|
+
if (item?.path) onNavigate?.(item.path)
|
|
41
|
+
}
|
|
42
|
+
|
|
46
43
|
return (
|
|
47
44
|
<SidemenuProvider value={context}>
|
|
48
|
-
<
|
|
45
|
+
<Box
|
|
46
|
+
className={cs('vui-sidemenu', className)}
|
|
47
|
+
elevation="3"
|
|
48
|
+
flexDirection="column"
|
|
49
|
+
minWidth={0}
|
|
50
|
+
overflowX="hidden"
|
|
51
|
+
ref={ref}
|
|
52
|
+
transitionDuration="normal"
|
|
53
|
+
w={w}
|
|
54
|
+
{...styles.container}
|
|
55
|
+
{...rest}
|
|
56
|
+
>
|
|
49
57
|
<Box flexDirection="column" flexGrow={1} overflowX="hidden" overflowY="auto" w="100%">
|
|
50
58
|
{items
|
|
51
|
-
? items?.map?.((item: SidemenuItemProps, key: number) =>
|
|
59
|
+
? items?.map?.((item: SidemenuItemProps, key: number) => (
|
|
60
|
+
<SidemenuItem
|
|
61
|
+
isActive={isActivePath(item?.path)}
|
|
62
|
+
key={key}
|
|
63
|
+
{...item}
|
|
64
|
+
onClick={() => onItemClick(item)}
|
|
65
|
+
/>
|
|
66
|
+
))
|
|
52
67
|
: children}
|
|
53
68
|
</Box>
|
|
54
69
|
<Box className="vui-sidemenu-bottom" w="100%" {...styles.bottom}>
|
|
@@ -63,7 +78,7 @@ export const Sidemenu = vui<'div', SidemenuProps>((props, ref) => {
|
|
|
63
78
|
<Icon name={icon} />
|
|
64
79
|
</Button>
|
|
65
80
|
</Box>
|
|
66
|
-
</
|
|
81
|
+
</Box>
|
|
67
82
|
</SidemenuProvider>
|
|
68
83
|
)
|
|
69
84
|
}) as VuiComponent<'div', SidemenuProps> & {
|
|
@@ -13,6 +13,8 @@ export type SidemenuProps = SystemProps &
|
|
|
13
13
|
items?: SidemenuItemProps[]
|
|
14
14
|
/** Whether the menu is expanded @default false */
|
|
15
15
|
isExpanded?: boolean
|
|
16
|
+
/** External callback for navigation to the item path, could be a custom function or React Router hook: https://reactrouter.com/en/main/hooks/use-navigate */
|
|
17
|
+
onNavigate?: (to: string) => void
|
|
16
18
|
/** With of the container when the side menu is expanded @default 280 */
|
|
17
19
|
width?: number
|
|
18
20
|
}
|
|
@@ -30,6 +32,8 @@ export type SidemenuItemProps = BoxProps & {
|
|
|
30
32
|
isActive?: boolean
|
|
31
33
|
/** On click callback */
|
|
32
34
|
onClick?: () => void
|
|
35
|
+
/** Router path */
|
|
36
|
+
path?: string
|
|
33
37
|
/** Title */
|
|
34
38
|
title: string
|
|
35
39
|
}
|
|
@@ -41,6 +41,7 @@ export const SidemenuItem = vui<'button', SidemenuItemProps>((props, ref) => {
|
|
|
41
41
|
borderRadius: 0,
|
|
42
42
|
borderLeft: '3px solid transparent',
|
|
43
43
|
borderLeftColor: isActive ? (isDark ? 'digiGreen.main' : 'seaBlue.main') : undefined,
|
|
44
|
+
bg: isDark ? 'darkBlue.main' : isActive ? 'skyBlue.95' : 'white',
|
|
44
45
|
color: hasChildrenExpanded ? 'seaBlue.main' : isDark ? 'digiGreen.main' : 'sandstone.10',
|
|
45
46
|
h: 'auto',
|
|
46
47
|
justifyContent: 'space-between',
|
|
@@ -50,6 +51,7 @@ export const SidemenuItem = vui<'button', SidemenuItemProps>((props, ref) => {
|
|
|
50
51
|
w: '100%',
|
|
51
52
|
...styles.item,
|
|
52
53
|
minH: size === 'lg' ? '56px' : '40px',
|
|
54
|
+
hoverBg: isDark ? 'seaBlue.main' : 'skyBlue.90',
|
|
53
55
|
...rest
|
|
54
56
|
}
|
|
55
57
|
|
package/src/sidemenu/theme.ts
CHANGED
package/src/utils/index.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const isActivePath = (path?: string): boolean => !!path && window.location.pathname.includes(path)
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { FC } from 'react';
|
|
2
|
-
import { ChildrenProp } from '../core';
|
|
3
|
-
import { FocusLockProps } from './focusLock.types';
|
|
4
|
-
/**
|
|
5
|
-
* Traps the focus within the provided content. That is, tabbing with keyboard will
|
|
6
|
-
* only cycle through the children and won't leave the boundary of the FocusLock.
|
|
7
|
-
* This behavior enhances accessibility of the Modal component.
|
|
8
|
-
*/
|
|
9
|
-
export declare const FocusLock: FC<FocusLockProps & ChildrenProp>;
|
|
10
|
-
export default FocusLock;
|
|
11
|
-
//# sourceMappingURL=focusLock.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"focusLock.d.ts","sourceRoot":"","sources":["../../../src/modal/focusLock.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAAe,MAAM,OAAO,CAAA;AAG9C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,cAAc,GAAG,YAAY,CAmCvD,CAAA;AAED,eAAe,SAAS,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"focusLock.types.d.ts","sourceRoot":"","sources":["../../../src/modal/focusLock.types.ts"],"names":[],"mappings":";AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,uEAAuE;IACvE,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAA;IACjD,6EAA6E;IAC7E,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAA;IACnD,+BAA+B;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,+DAA+D;IAC/D,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,2FAA2F;IAC3F,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"modalStyle.d.ts","sourceRoot":"","sources":["../../../src/modal/modalStyle.ts"],"names":[],"mappings":";AAEA,wBAMC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const core_1 = require("../core");
|
|
4
|
-
exports.default = (0, core_1.createGlobalStyle) `
|
|
5
|
-
|
|
6
|
-
body.vui-no-scroll {
|
|
7
|
-
overflow: hidden !important;
|
|
8
|
-
overscroll-behavior: contain;
|
|
9
|
-
}
|
|
10
|
-
`;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { FC } from 'react';
|
|
2
|
-
import { ChildrenProp } from '../core';
|
|
3
|
-
import { FocusLockProps } from './focusLock.types';
|
|
4
|
-
/**
|
|
5
|
-
* Traps the focus within the provided content. That is, tabbing with keyboard will
|
|
6
|
-
* only cycle through the children and won't leave the boundary of the FocusLock.
|
|
7
|
-
* This behavior enhances accessibility of the Modal component.
|
|
8
|
-
*/
|
|
9
|
-
export declare const FocusLock: FC<FocusLockProps & ChildrenProp>;
|
|
10
|
-
export default FocusLock;
|
|
11
|
-
//# sourceMappingURL=focusLock.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"focusLock.d.ts","sourceRoot":"","sources":["../../../src/modal/focusLock.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAAe,MAAM,OAAO,CAAA;AAG9C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,cAAc,GAAG,YAAY,CAmCvD,CAAA;AAED,eAAe,SAAS,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"focusLock.types.d.ts","sourceRoot":"","sources":["../../../src/modal/focusLock.types.ts"],"names":[],"mappings":";AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,uEAAuE;IACvE,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAA;IACjD,6EAA6E;IAC7E,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAA;IACnD,+BAA+B;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,+DAA+D;IAC/D,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,2FAA2F;IAC3F,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"modalStyle.d.ts","sourceRoot":"","sources":["../../../src/modal/modalStyle.ts"],"names":[],"mappings":";AAEA,wBAMC"}
|
package/src/modal/modalStyle.ts
DELETED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|