@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.
Files changed (187) hide show
  1. package/dist/cjs/button/buttonIcon.d.ts.map +1 -1
  2. package/dist/cjs/button/buttonIcon.js +4 -2
  3. package/dist/cjs/core/vuiProvider/consts.d.ts +2 -0
  4. package/dist/cjs/core/vuiProvider/consts.d.ts.map +1 -0
  5. package/dist/cjs/core/vuiProvider/consts.js +4 -0
  6. package/dist/cjs/core/vuiProvider/globalStyle.d.ts.map +1 -1
  7. package/dist/cjs/core/vuiProvider/globalStyle.js +6 -0
  8. package/dist/cjs/core/vuiProvider/index.d.ts +2 -0
  9. package/dist/cjs/core/vuiProvider/index.d.ts.map +1 -1
  10. package/dist/cjs/core/vuiProvider/index.js +2 -0
  11. package/dist/cjs/core/vuiProvider/useBodyScrollLock.d.ts +7 -0
  12. package/dist/cjs/core/vuiProvider/useBodyScrollLock.d.ts.map +1 -0
  13. package/dist/cjs/core/vuiProvider/useBodyScrollLock.js +18 -0
  14. package/dist/cjs/core/vuiProvider/vuiProvider.d.ts.map +1 -1
  15. package/dist/cjs/core/vuiProvider/vuiProvider.js +0 -2
  16. package/dist/cjs/definition/definition.d.ts.map +1 -1
  17. package/dist/cjs/definition/definition.js +0 -1
  18. package/dist/cjs/dialog/consts.d.ts +0 -1
  19. package/dist/cjs/dialog/consts.d.ts.map +1 -1
  20. package/dist/cjs/dialog/consts.js +1 -2
  21. package/dist/cjs/focusLock/focusLock.d.ts +11 -0
  22. package/dist/cjs/focusLock/focusLock.d.ts.map +1 -0
  23. package/dist/cjs/{modal → focusLock}/focusLock.js +3 -3
  24. package/dist/cjs/focusLock/focusLock.types.d.ts.map +1 -0
  25. package/dist/cjs/focusLock/index.d.ts +4 -0
  26. package/dist/cjs/focusLock/index.d.ts.map +1 -0
  27. package/dist/cjs/focusLock/index.js +24 -0
  28. package/dist/cjs/footer/footer.d.ts.map +1 -1
  29. package/dist/cjs/footer/footer.js +5 -1
  30. package/dist/cjs/footer/footer.types.d.ts +2 -1
  31. package/dist/cjs/footer/footer.types.d.ts.map +1 -1
  32. package/dist/cjs/index.d.ts +1 -0
  33. package/dist/cjs/index.d.ts.map +1 -1
  34. package/dist/cjs/index.js +1 -0
  35. package/dist/cjs/input/consts.d.ts +6 -0
  36. package/dist/cjs/input/consts.d.ts.map +1 -1
  37. package/dist/cjs/input/consts.js +7 -1
  38. package/dist/cjs/input/input.d.ts.map +1 -1
  39. package/dist/cjs/input/input.js +3 -3
  40. package/dist/cjs/input/input.types.d.ts +2 -0
  41. package/dist/cjs/input/input.types.d.ts.map +1 -1
  42. package/dist/cjs/modal/index.d.ts +2 -2
  43. package/dist/cjs/modal/index.d.ts.map +1 -1
  44. package/dist/cjs/modal/index.js +2 -2
  45. package/dist/cjs/modal/modal.d.ts.map +1 -1
  46. package/dist/cjs/modal/modal.js +1 -1
  47. package/dist/cjs/modal/modal.types.d.ts +1 -1
  48. package/dist/cjs/modal/modal.types.d.ts.map +1 -1
  49. package/dist/cjs/modal/modalManager.d.ts +2 -2
  50. package/dist/cjs/modal/modalManager.d.ts.map +1 -1
  51. package/dist/cjs/modal/modalManager.js +6 -9
  52. package/dist/cjs/sidemenu/sidemenu.d.ts +0 -1
  53. package/dist/cjs/sidemenu/sidemenu.d.ts.map +1 -1
  54. package/dist/cjs/sidemenu/sidemenu.js +10 -11
  55. package/dist/cjs/sidemenu/sidemenu.types.d.ts +4 -0
  56. package/dist/cjs/sidemenu/sidemenu.types.d.ts.map +1 -1
  57. package/dist/cjs/sidemenu/sidemenuItem.d.ts.map +1 -1
  58. package/dist/cjs/sidemenu/sidemenuItem.js +1 -1
  59. package/dist/cjs/sidemenu/theme.d.ts +3 -1
  60. package/dist/cjs/sidemenu/theme.d.ts.map +1 -1
  61. package/dist/cjs/sidemenu/theme.js +3 -1
  62. package/dist/cjs/theme/components.d.ts +3 -1
  63. package/dist/cjs/theme/components.d.ts.map +1 -1
  64. package/dist/cjs/theme/defaultTheme.d.ts +3 -1
  65. package/dist/cjs/theme/defaultTheme.d.ts.map +1 -1
  66. package/dist/cjs/utils/index.d.ts +1 -0
  67. package/dist/cjs/utils/index.d.ts.map +1 -1
  68. package/dist/cjs/utils/index.js +1 -0
  69. package/dist/cjs/utils/window.d.ts +2 -0
  70. package/dist/cjs/utils/window.d.ts.map +1 -0
  71. package/dist/cjs/utils/window.js +5 -0
  72. package/dist/esm/button/buttonIcon.d.ts.map +1 -1
  73. package/dist/esm/button/buttonIcon.js +4 -2
  74. package/dist/esm/core/vuiProvider/consts.d.ts +2 -0
  75. package/dist/esm/core/vuiProvider/consts.d.ts.map +1 -0
  76. package/dist/esm/core/vuiProvider/consts.js +1 -0
  77. package/dist/esm/core/vuiProvider/globalStyle.d.ts.map +1 -1
  78. package/dist/esm/core/vuiProvider/globalStyle.js +6 -0
  79. package/dist/esm/core/vuiProvider/index.d.ts +2 -0
  80. package/dist/esm/core/vuiProvider/index.d.ts.map +1 -1
  81. package/dist/esm/core/vuiProvider/index.js +2 -0
  82. package/dist/esm/core/vuiProvider/useBodyScrollLock.d.ts +7 -0
  83. package/dist/esm/core/vuiProvider/useBodyScrollLock.d.ts.map +1 -0
  84. package/dist/esm/core/vuiProvider/useBodyScrollLock.js +14 -0
  85. package/dist/esm/core/vuiProvider/vuiProvider.d.ts.map +1 -1
  86. package/dist/esm/core/vuiProvider/vuiProvider.js +0 -2
  87. package/dist/esm/definition/definition.d.ts.map +1 -1
  88. package/dist/esm/definition/definition.js +0 -1
  89. package/dist/esm/dialog/consts.d.ts +0 -1
  90. package/dist/esm/dialog/consts.d.ts.map +1 -1
  91. package/dist/esm/dialog/consts.js +0 -1
  92. package/dist/esm/focusLock/focusLock.d.ts +11 -0
  93. package/dist/esm/focusLock/focusLock.d.ts.map +1 -0
  94. package/dist/esm/{modal → focusLock}/focusLock.js +3 -3
  95. package/dist/esm/focusLock/focusLock.types.d.ts.map +1 -0
  96. package/dist/esm/focusLock/index.d.ts +4 -0
  97. package/dist/esm/focusLock/index.d.ts.map +1 -0
  98. package/dist/esm/focusLock/index.js +3 -0
  99. package/dist/esm/footer/footer.d.ts.map +1 -1
  100. package/dist/esm/footer/footer.js +5 -1
  101. package/dist/esm/footer/footer.types.d.ts +2 -1
  102. package/dist/esm/footer/footer.types.d.ts.map +1 -1
  103. package/dist/esm/index.d.ts +1 -0
  104. package/dist/esm/index.d.ts.map +1 -1
  105. package/dist/esm/index.js +1 -0
  106. package/dist/esm/input/consts.d.ts +6 -0
  107. package/dist/esm/input/consts.d.ts.map +1 -1
  108. package/dist/esm/input/consts.js +6 -0
  109. package/dist/esm/input/input.d.ts.map +1 -1
  110. package/dist/esm/input/input.js +4 -4
  111. package/dist/esm/input/input.types.d.ts +2 -0
  112. package/dist/esm/input/input.types.d.ts.map +1 -1
  113. package/dist/esm/modal/index.d.ts +2 -2
  114. package/dist/esm/modal/index.d.ts.map +1 -1
  115. package/dist/esm/modal/index.js +2 -2
  116. package/dist/esm/modal/modal.d.ts.map +1 -1
  117. package/dist/esm/modal/modal.js +1 -1
  118. package/dist/esm/modal/modal.types.d.ts +1 -1
  119. package/dist/esm/modal/modal.types.d.ts.map +1 -1
  120. package/dist/esm/modal/modalManager.d.ts +2 -2
  121. package/dist/esm/modal/modalManager.d.ts.map +1 -1
  122. package/dist/esm/modal/modalManager.js +6 -9
  123. package/dist/esm/sidemenu/sidemenu.d.ts +0 -1
  124. package/dist/esm/sidemenu/sidemenu.d.ts.map +1 -1
  125. package/dist/esm/sidemenu/sidemenu.js +10 -12
  126. package/dist/esm/sidemenu/sidemenu.types.d.ts +4 -0
  127. package/dist/esm/sidemenu/sidemenu.types.d.ts.map +1 -1
  128. package/dist/esm/sidemenu/sidemenuItem.d.ts.map +1 -1
  129. package/dist/esm/sidemenu/sidemenuItem.js +2 -0
  130. package/dist/esm/sidemenu/theme.d.ts +3 -1
  131. package/dist/esm/sidemenu/theme.d.ts.map +1 -1
  132. package/dist/esm/sidemenu/theme.js +3 -1
  133. package/dist/esm/theme/components.d.ts +3 -1
  134. package/dist/esm/theme/components.d.ts.map +1 -1
  135. package/dist/esm/theme/defaultTheme.d.ts +3 -1
  136. package/dist/esm/theme/defaultTheme.d.ts.map +1 -1
  137. package/dist/esm/utils/index.d.ts +1 -0
  138. package/dist/esm/utils/index.d.ts.map +1 -1
  139. package/dist/esm/utils/index.js +1 -0
  140. package/dist/esm/utils/window.d.ts +2 -0
  141. package/dist/esm/utils/window.d.ts.map +1 -0
  142. package/dist/esm/utils/window.js +1 -0
  143. package/package.json +1 -1
  144. package/src/button/buttonIcon.tsx +6 -3
  145. package/src/core/vuiProvider/consts.ts +1 -0
  146. package/src/core/vuiProvider/globalStyle.tsx +6 -0
  147. package/src/core/vuiProvider/index.ts +2 -0
  148. package/src/core/vuiProvider/useBodyScrollLock.tsx +17 -0
  149. package/src/core/vuiProvider/vuiProvider.tsx +0 -2
  150. package/src/definition/definition.tsx +0 -3
  151. package/src/dialog/consts.ts +0 -2
  152. package/src/{modal → focusLock}/focusLock.tsx +4 -3
  153. package/src/focusLock/index.ts +3 -0
  154. package/src/footer/footer.tsx +29 -1
  155. package/src/footer/footer.types.ts +2 -1
  156. package/src/index.ts +1 -0
  157. package/src/input/consts.ts +7 -0
  158. package/src/input/input.tsx +66 -55
  159. package/src/input/input.types.ts +2 -0
  160. package/src/modal/index.ts +2 -2
  161. package/src/modal/modal.tsx +1 -2
  162. package/src/modal/modal.types.ts +1 -1
  163. package/src/modal/modalManager.ts +6 -9
  164. package/src/sidemenu/sidemenu.tsx +29 -14
  165. package/src/sidemenu/sidemenu.types.ts +4 -0
  166. package/src/sidemenu/sidemenuItem.tsx +2 -0
  167. package/src/sidemenu/theme.ts +3 -1
  168. package/src/utils/index.ts +1 -0
  169. package/src/utils/window.ts +1 -0
  170. package/dist/cjs/modal/focusLock.d.ts +0 -11
  171. package/dist/cjs/modal/focusLock.d.ts.map +0 -1
  172. package/dist/cjs/modal/focusLock.types.d.ts.map +0 -1
  173. package/dist/cjs/modal/modalStyle.d.ts +0 -3
  174. package/dist/cjs/modal/modalStyle.d.ts.map +0 -1
  175. package/dist/cjs/modal/modalStyle.js +0 -10
  176. package/dist/esm/modal/focusLock.d.ts +0 -11
  177. package/dist/esm/modal/focusLock.d.ts.map +0 -1
  178. package/dist/esm/modal/focusLock.types.d.ts.map +0 -1
  179. package/dist/esm/modal/modalStyle.d.ts +0 -3
  180. package/dist/esm/modal/modalStyle.d.ts.map +0 -1
  181. package/dist/esm/modal/modalStyle.js +0 -8
  182. package/src/modal/modalStyle.ts +0 -9
  183. /package/dist/cjs/{modal → focusLock}/focusLock.types.d.ts +0 -0
  184. /package/dist/cjs/{modal → focusLock}/focusLock.types.js +0 -0
  185. /package/dist/esm/{modal → focusLock}/focusLock.types.d.ts +0 -0
  186. /package/dist/esm/{modal → focusLock}/focusLock.types.js +0 -0
  187. /package/src/{modal → focusLock}/focusLock.types.ts +0 -0
@@ -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
- size,
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
- <AutoCompletePopover
117
- autoCompleteMaxHeight={autoCompleteMaxHeight}
118
- autoCompleteOptions={autoCompleteOptions}
119
- filterAutoCompleteOptions={filterAutoCompleteOptions}
120
- onAutoCompleteSelect={onAutoCompleteSelect}
121
- >
122
- <InputBase className={cs('vui-input', className)} ref={ref} {...styles.container} {...aliasedProps} {...rest}>
123
- {itemLeft}
124
- {isString(iconLeft) ? <InputIcon ml={1} name={iconLeft} /> : iconLeft}
125
- {children ?? input ?? (
126
- <InputInput
127
- ref={inputRef}
128
- {...{
129
- autoFocus,
130
- defaultValue,
131
- disabled,
132
- id,
133
- max,
134
- maxLength,
135
- min,
136
- name,
137
- onBlur,
138
- onChange,
139
- onFocus,
140
- pattern,
141
- placeholder,
142
- readOnly,
143
- required,
144
- step,
145
- type
146
- }}
147
- autoComplete={autoCompleteOptions?.length ? 'off' : autoComplete}
148
- value={valueInternal}
149
- {...inputProps}
150
- />
151
- )}
152
- {isString(iconRight) ? <InputIcon mr={1} name={iconRight} /> : iconRight}
153
- {itemRight}
154
- {state && <InputIcon mr={1} {...states[state]?.iconProps} />}
155
- {showCount && (
156
- <T
157
- className="vui-inputCount"
158
- color={maxLength && count > maxLength ? inputColors.error : inputColors.helpText}
159
- position="absolute"
160
- right={0}
161
- size="sm"
162
- top="calc(100% + 1px)"
163
- >
164
- {count} {maxLength ? `/ ${maxLength}` : null}
165
- </T>
166
- )}
167
- </InputBase>
168
- </AutoCompletePopover>
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>
@@ -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. */
@@ -1,6 +1,6 @@
1
1
  export * from './context'
2
- export * from './focusLock'
3
- export * from './focusLock.types'
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'
@@ -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}
@@ -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 { addBodyClass, removeBodyClass } from '../utils/dom'
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) addBodyClass('vui-no-scroll')
27
+ if (!disableScrollLock) setIsScrollLocked(true)
31
28
  }
32
29
 
33
30
  return () => {
34
31
  manager.remove(ref)
35
- if (!disableScrollLock) removeBodyClass('vui-no-scroll')
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 { styled, useStyleConfig, vui, VuiComponent } from '../core'
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
- <SidemenuBase className={cs('vui-sidemenu', className)} ref={ref} w={w} {...styles.container} {...rest}>
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) => <SidemenuItem key={key} {...item} />)
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
- </SidemenuBase>
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
 
@@ -21,7 +21,9 @@ const sizes = {
21
21
  }
22
22
  const variants = {
23
23
  light: {
24
- container: {},
24
+ container: {
25
+ bg: 'white'
26
+ },
25
27
  bottom: {
26
28
  borderTop: '1px solid lightgray'
27
29
  },
@@ -9,3 +9,4 @@ export * from './react'
9
9
  export * from './styles'
10
10
  export * from './types'
11
11
  export * from './uid'
12
+ export * from './window'
@@ -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,3 +0,0 @@
1
- declare const _default: import("styled-components").GlobalStyleComponent<{}, import("styled-components").DefaultTheme>;
2
- export default _default;
3
- //# sourceMappingURL=modalStyle.d.ts.map
@@ -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,3 +0,0 @@
1
- declare const _default: import("styled-components").GlobalStyleComponent<{}, import("styled-components").DefaultTheme>;
2
- export default _default;
3
- //# sourceMappingURL=modalStyle.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"modalStyle.d.ts","sourceRoot":"","sources":["../../../src/modal/modalStyle.ts"],"names":[],"mappings":";AAEA,wBAMC"}
@@ -1,8 +0,0 @@
1
- import { createGlobalStyle } from '../core';
2
- export default createGlobalStyle `
3
-
4
- body.vui-no-scroll {
5
- overflow: hidden !important;
6
- overscroll-behavior: contain;
7
- }
8
- `;
@@ -1,9 +0,0 @@
1
- import { createGlobalStyle } from '../core'
2
-
3
- export default createGlobalStyle`
4
-
5
- body.vui-no-scroll {
6
- overflow: hidden !important;
7
- overscroll-behavior: contain;
8
- }
9
- `
File without changes