@globalbrain/sefirot 3.44.0 → 3.46.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.
@@ -18,6 +18,8 @@ defineProps<{
18
18
  :label="item.label"
19
19
  :text="item.text"
20
20
  :link="item.link"
21
+ :disabled="item.disabled"
22
+ :tooltip="item.tooltip"
21
23
  :on-click="item.onClick"
22
24
  />
23
25
  </div>
@@ -1,15 +1,15 @@
1
1
  <script setup lang="ts">
2
2
  import { type IconifyIcon } from '@iconify/vue/dist/offline'
3
3
  import { computed } from 'vue'
4
- import SIcon from './SIcon.vue'
5
- import SLink from './SLink.vue'
4
+ import SButton, { type Tooltip } from './SButton.vue'
6
5
 
7
6
  export interface ActionListItem {
8
7
  leadIcon?: IconifyIcon
9
8
  link?: string
10
9
  label?: string
11
10
  disabled?: boolean
12
- onClick?(): void
11
+ tooltip?: Tooltip
12
+ onClick?: () => void
13
13
 
14
14
  /** @deprecated Use `:label` instead. */
15
15
  text?: string
@@ -20,54 +20,36 @@ const props = defineProps<ActionListItem>()
20
20
  const _label = computed(() => {
21
21
  return props.label ?? props.text
22
22
  })
23
+
24
+ const _tooltip = computed<Tooltip | undefined>(() => {
25
+ return props.tooltip ? { display: 'block', ...props.tooltip } : undefined
26
+ })
23
27
  </script>
24
28
 
25
29
  <template>
26
- <component
27
- :is="link ? SLink : 'button'"
28
- class="SActionList"
29
- :href="link"
30
- @click="() => onClick?.()"
31
- >
32
- <span v-if="leadIcon" class="lead-icon">
33
- <SIcon class="lead-icon-svg" :icon="leadIcon" />
34
- </span>
35
- <span class="text">{{ _label }}</span>
36
- </component>
30
+ <div class="SActionListItem">
31
+ <SButton
32
+ block
33
+ size="small"
34
+ type="text"
35
+ :icon="leadIcon"
36
+ :label="_label"
37
+ :href="link"
38
+ :disabled="disabled"
39
+ :tooltip="_tooltip"
40
+ @click="onClick"
41
+ />
42
+ </div>
37
43
  </template>
38
44
 
39
45
  <style scoped lang="postcss">
40
- .SActionList {
41
- display: flex;
42
- gap: 8px;
43
- border-radius: 6px;
44
- padding: 4px 8px;
45
- width: 100%;
46
- text-align: left;
47
- line-height: 24px;
48
- font-size: 14px;
49
- transition: background-color 0.25s;
50
-
51
- &:hover {
52
- background-color: var(--c-bg-mute-1);
53
- }
46
+ .SActionListItem {
47
+ --button-font-size: 14px;
54
48
 
55
- &:active {
56
- background-color: var(--c-bg-mute-2);
57
- transition: background-color 0.1s;
49
+ :deep(.SButton),
50
+ :slotted(.SButton) {
51
+ justify-content: flex-start;
52
+ font-weight: 400;
58
53
  }
59
54
  }
60
-
61
- .lead-icon {
62
- display: flex;
63
- align-items: center;
64
- height: 24px;
65
- flex-shrink: 0;
66
- color: var(--c-text-2);
67
- }
68
-
69
- .lead-icon-svg {
70
- width: 16px;
71
- height: 16px;
72
- }
73
55
  </style>
@@ -20,7 +20,7 @@ const props = defineProps<{
20
20
  block?: boolean
21
21
  loading?: boolean
22
22
  disabled?: boolean
23
- tooltip?: Tooltip
23
+ tooltip?: string | Tooltip
24
24
  options: DropdownSection[]
25
25
  }>()
26
26
 
@@ -1,5 +1,8 @@
1
1
  <script setup lang="ts">
2
2
  import { computed } from 'vue'
3
+ import { type Position } from '../composables/Tooltip'
4
+ import SFragment from './SFragment.vue'
5
+ import STooltip from './STooltip.vue'
3
6
 
4
7
  export type Size =
5
8
  | 'nano'
@@ -14,6 +17,7 @@ const props = defineProps<{
14
17
  size?: Size
15
18
  avatar?: string | null
16
19
  name?: string | null
20
+ tooltip?: boolean | { position?: Position }
17
21
  }>()
18
22
 
19
23
  const classes = computed(() => [
@@ -22,13 +26,28 @@ const classes = computed(() => [
22
26
  ])
23
27
 
24
28
  const initial = computed(() => props.name?.charAt(0).toUpperCase())
29
+
30
+ const tooltipPosition = computed(() => {
31
+ return (props.tooltip && typeof props.tooltip === 'object')
32
+ ? props.tooltip.position || 'top'
33
+ : 'top'
34
+ })
25
35
  </script>
26
36
 
27
37
  <template>
28
- <div class="SAvatar" :class="classes">
29
- <img v-if="avatar" class="img" :src="avatar">
30
- <p v-else-if="initial" class="initial">{{ initial }}</p>
31
- </div>
38
+ <SFragment
39
+ :is="tooltip && name && STooltip"
40
+ :text="name"
41
+ :position="tooltipPosition"
42
+ display="block"
43
+ tag="div"
44
+ trigger-tag="div"
45
+ >
46
+ <div class="SAvatar" :class="classes">
47
+ <img v-if="avatar" class="img" :src="avatar">
48
+ <p v-else-if="initial" class="initial">{{ initial }}</p>
49
+ </div>
50
+ </SFragment>
32
51
  </template>
33
52
 
34
53
  <style lang="postcss" scoped>
@@ -36,8 +55,8 @@ const initial = computed(() => props.name?.charAt(0).toUpperCase())
36
55
  display: flex;
37
56
  justify-content: center;
38
57
  align-items: center;
39
- border-radius: 50%;
40
58
  background-color: var(--c-bg-elv-1);
59
+ border-radius: 50%;
41
60
  overflow: hidden;
42
61
  }
43
62
 
@@ -45,6 +64,8 @@ const initial = computed(() => props.name?.charAt(0).toUpperCase())
45
64
  object-fit: cover;
46
65
  height: 100%;
47
66
  width: 100%;
67
+ border-radius: 50%;
68
+ overflow: hidden;
48
69
  }
49
70
 
50
71
  .initial {
@@ -1,5 +1,6 @@
1
1
  <script setup lang="ts">
2
2
  import { computed } from 'vue'
3
+ import { type Position } from '../composables/Tooltip'
3
4
  import SAvatar from './SAvatar.vue'
4
5
 
5
6
  export type Size = 'mini' | 'small' | 'medium' | 'large' | 'jumbo'
@@ -8,6 +9,7 @@ const props = withDefaults(defineProps<{
8
9
  size?: Size
9
10
  avatars: { image?: string; name?: string }[]
10
11
  avatarCount?: number
12
+ tooltip?: boolean | { position?: Position }
11
13
  }>(), {
12
14
  size: 'medium',
13
15
  avatarCount: 2
@@ -30,6 +32,7 @@ const count = computed(() => {
30
32
  :size="size"
31
33
  :avatar="avatar.image"
32
34
  :name="avatar.name"
35
+ :tooltip="tooltip"
33
36
  />
34
37
  <div v-if="count" class="more">+{{ count }}</div>
35
38
  </div>
@@ -39,16 +42,18 @@ const count = computed(() => {
39
42
  .SAvatarStack {
40
43
  display: flex;
41
44
 
42
- > * {
43
- border: 2px solid var(--c-bg-elv-2);
45
+ :slotted(.SAvatar), :deep(.SAvatar), .more {
44
46
  flex-shrink: 0;
47
+ border: 2px solid var(--c-bg-elv-2);
48
+ border-radius: 50%;
49
+ overflow: hidden;
45
50
  }
46
51
 
47
- &.mini > *:not(:last-child) { margin-right: -6px }
48
- &.small > *:not(:last-child) { margin-right: -8px }
49
- &.medium > *:not(:last-child) { margin-right: -8px }
50
- &.large > *:not(:last-child) { margin-right: -12px }
51
- &.jumbo > *:not(:last-child) { margin-right: -16px }
52
+ &.mini > :deep(*):not(:last-child) { margin-right: -6px }
53
+ &.small > :deep(*):not(:last-child) { margin-right: -8px }
54
+ &.medium > :deep(*):not(:last-child) { margin-right: -8px }
55
+ &.large > :deep(*):not(:last-child) { margin-right: -12px }
56
+ &.jumbo > :deep(*):not(:last-child) { margin-right: -16px }
52
57
  }
53
58
 
54
59
  .more {
@@ -61,6 +66,8 @@ const count = computed(() => {
61
66
  border-radius: 50%;
62
67
  line-height: 1;
63
68
  color: var(--c-text-2);
69
+ z-index: 1;
70
+ height: 100%;
64
71
 
65
72
  .mini & { font-size: 10px }
66
73
  .small & { font-size: 10px }
@@ -24,8 +24,10 @@ export type Mode =
24
24
 
25
25
  export interface Tooltip {
26
26
  tag?: string
27
+ triggerTag?: string
27
28
  text?: MaybeRef<string | null>
28
29
  position?: Position
30
+ display?: 'inline' | 'inline-block' | 'block'
29
31
  trigger?: 'hover' | 'focus' | 'both'
30
32
  timeout?: number
31
33
  }
@@ -46,7 +48,7 @@ const props = defineProps<{
46
48
  block?: boolean
47
49
  loading?: boolean
48
50
  disabled?: boolean
49
- tooltip?: Tooltip
51
+ tooltip?: string | Tooltip
50
52
  }>()
51
53
 
52
54
  const emit = defineEmits<{
@@ -78,7 +80,10 @@ const computedTag = computed(() => {
78
80
  const slots = useSlots()
79
81
 
80
82
  const hasTooltip = computed(() => {
81
- return slots['tooltip-text'] || unref(props.tooltip?.text)
83
+ return !!(
84
+ slots['tooltip-text']
85
+ || (typeof props.tooltip === 'object' ? unref(props.tooltip.text) : props.tooltip)
86
+ )
82
87
  })
83
88
 
84
89
  function handleClick(): void {
@@ -91,12 +96,12 @@ function handleClick(): void {
91
96
  <template>
92
97
  <SFragment
93
98
  :is="hasTooltip && STooltip"
94
- :tag="props.tooltip?.tag"
95
- :text="unref(props.tooltip?.text)"
96
- :position="props.tooltip?.position"
97
- display="inline-block"
98
- :trigger="props.tooltip?.trigger ?? 'both'"
99
- :timeout="props.tooltip?.timeout"
99
+ :tag="typeof tooltip === 'object' ? tooltip.tag : undefined"
100
+ :text="typeof tooltip === 'object' ? unref(tooltip.text) : tooltip"
101
+ :position="typeof tooltip === 'object' ? tooltip.position : undefined"
102
+ :display="typeof tooltip === 'object' ? tooltip.display ?? 'inline-block' : 'inline-block'"
103
+ :trigger="typeof tooltip === 'object' ? tooltip.trigger ?? 'both' : 'both'"
104
+ :timeout="typeof tooltip === 'object' ? tooltip.timeout : undefined"
100
105
  :tabindex="-1"
101
106
  >
102
107
  <template v-if="$slots['tooltip-text']" #text><slot name="tooltip-text" /></template>
@@ -217,7 +222,7 @@ function handleClick(): void {
217
222
  &.has-label { padding: var(--button-padding, 0 12px); }
218
223
  &.has-label.has-lead-icon { padding: var(--button-padding, 0 10px 0 8px); }
219
224
  &.has-label.has-trail-icon { padding: var(--button-padding, 0 8px 0 10px); }
220
- .content { gap: 6px; }
225
+ .content { gap: 8px; }
221
226
  .icon-svg { width: 16px; height: 16px; }
222
227
  }
223
228
 
@@ -230,7 +235,7 @@ function handleClick(): void {
230
235
  &.has-label { padding: var(--button-padding, 0 16px); }
231
236
  &.has-label.has-lead-icon { padding: var(--button-padding, 0 12px 0 10px); }
232
237
  &.has-label.has-trail-icon { padding: var(--button-padding, 0 10px 0 12px); }
233
- .content { gap: 6px; }
238
+ .content { gap: 8px; }
234
239
  .icon-svg { width: 18px; height: 18px; }
235
240
  }
236
241
 
@@ -243,7 +248,7 @@ function handleClick(): void {
243
248
  &.has-label { padding: var(--button-padding, 0 20px); }
244
249
  &.has-label.has-lead-icon { padding: var(--button-padding, 0 14px 0 12px); }
245
250
  &.has-label.has-trail-icon { padding: var(--button-padding, 0 12px 0 14px); }
246
- .content { gap: 6px; }
251
+ .content { gap: 8px; }
247
252
  .icon-svg { width: 18px; height: 18px; }
248
253
  }
249
254
 
@@ -7,7 +7,7 @@ defineProps<{
7
7
  labelMode?: Mode
8
8
  loading?: boolean
9
9
  disabled?: boolean
10
- tooltip?: Tooltip
10
+ tooltip?: string | Tooltip
11
11
  }>()
12
12
 
13
13
  defineEmits<{
@@ -5,7 +5,7 @@ import SButton, { type Tooltip } from './SButton.vue'
5
5
  defineProps<{
6
6
  icon: IconifyIcon
7
7
  disabled?: boolean
8
- tooltip?: Tooltip
8
+ tooltip?: string | Tooltip
9
9
  }>()
10
10
 
11
11
  defineEmits<{
@@ -4,7 +4,7 @@ import SButton, { type Tooltip } from './SButton.vue'
4
4
 
5
5
  defineProps<{
6
6
  disabled?: boolean
7
- tooltip?: Tooltip
7
+ tooltip?: string | Tooltip
8
8
  }>()
9
9
 
10
10
  defineEmits<{
@@ -8,7 +8,7 @@ import SButton, { type Tooltip } from './SButton.vue'
8
8
  const props = defineProps<{
9
9
  collapsed?: boolean
10
10
  disabled?: boolean
11
- tooltip?: Tooltip
11
+ tooltip?: string | Tooltip
12
12
  }>()
13
13
 
14
14
  defineEmits<{
@@ -1,11 +1,13 @@
1
1
  <script setup lang="ts">
2
2
  import { useControlSize } from '../composables/Control'
3
- import SButton from './SButton.vue'
3
+ import SButton, { type Tooltip } from './SButton.vue'
4
4
 
5
5
  defineProps<{
6
6
  as?: string
7
7
  icon?: any
8
8
  href?: string
9
+ disabled?: boolean
10
+ tooltip?: string | Tooltip
9
11
  }>()
10
12
 
11
13
  defineEmits<{
@@ -25,6 +27,8 @@ const size = useControlSize()
25
27
  :icon="icon"
26
28
  :href="href"
27
29
  block
30
+ :disabled="disabled"
31
+ :tooltip="tooltip"
28
32
  @click="$emit('click')"
29
33
  />
30
34
  </div>
@@ -14,7 +14,7 @@ defineProps<{
14
14
  href?: string
15
15
  loading?: boolean
16
16
  disabled?: boolean
17
- tooltip?: Tooltip
17
+ tooltip?: string | Tooltip
18
18
  options: DropdownSection[]
19
19
  }>()
20
20
 
@@ -13,7 +13,7 @@ defineProps<{
13
13
  href?: string
14
14
  loading?: boolean
15
15
  disabled?: boolean
16
- tooltip?: Tooltip
16
+ tooltip?: string | Tooltip
17
17
  }>()
18
18
 
19
19
  defineEmits<{
@@ -8,6 +8,6 @@ defineProps<{
8
8
  </script>
9
9
 
10
10
  <template>
11
- <Icon v-if="typeof icon.body === 'string'" :icon="icon as IconifyIcon" />
11
+ <Icon v-if="typeof icon.body === 'string'" :icon="(icon as IconifyIcon)" />
12
12
  <component v-else :is="icon" />
13
13
  </template>
@@ -101,6 +101,7 @@ const computedCell = computed<TableCell | undefined>(() =>
101
101
  :color="computedCell.color"
102
102
  :avatar-count="computedCell.avatarCount"
103
103
  :name-count="computedCell.nameCount"
104
+ :tooltip="computedCell.tooltip"
104
105
  />
105
106
  <STableCellActions
106
107
  v-else-if="computedCell.type === 'actions'"
@@ -1,6 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import { computed } from 'vue'
3
3
  import { type TableCellAvatarsOption } from '../composables/Table'
4
+ import { type Position } from '../composables/Tooltip'
4
5
  import SAvatar from './SAvatar.vue'
5
6
 
6
7
  const props = withDefaults(defineProps<{
@@ -10,6 +11,7 @@ const props = withDefaults(defineProps<{
10
11
  color?: 'neutral' | 'soft' | 'mute'
11
12
  avatarCount?: number
12
13
  nameCount?: number
14
+ tooltip?: boolean | { position?: Position }
13
15
  }>(), {
14
16
  avatarCount: 2,
15
17
  nameCount: 2
@@ -61,7 +63,7 @@ const displayNames = computed(() => {
61
63
  class="avatar"
62
64
  >
63
65
  <div class="avatar-box">
64
- <SAvatar size="mini" :avatar="avatar.image" :name="avatar.name" />
66
+ <SAvatar size="mini" :avatar="avatar.image" :name="avatar.name" :tooltip="tooltip" />
65
67
  </div>
66
68
  </div>
67
69
  <div v-if="avatarDiff > 0" class="avatar">
@@ -5,6 +5,7 @@ import { type Position, useTooltip } from '../composables/Tooltip'
5
5
 
6
6
  const props = withDefaults(defineProps<{
7
7
  tag?: string
8
+ triggerTag?: string
8
9
  text?: string
9
10
  position?: Position
10
11
  display?: 'inline' | 'inline-block' | 'block'
@@ -13,6 +14,7 @@ const props = withDefaults(defineProps<{
13
14
  tabindex?: number
14
15
  }>(), {
15
16
  tag: 'span',
17
+ triggerTag: 'span',
16
18
  position: 'top',
17
19
  trigger: 'hover'
18
20
  })
@@ -96,9 +98,9 @@ onBeforeUnmount(() => {
96
98
 
97
99
  <template>
98
100
  <component ref="root" :is="tag" class="STooltip" :class="rootClasses" :tabindex="tabindex">
99
- <span class="trigger" ref="trigger">
101
+ <component :is="triggerTag" class="trigger" ref="trigger">
100
102
  <slot />
101
- </span>
103
+ </component>
102
104
 
103
105
  <Teleport to="#sefirot-modals">
104
106
  <Transition name="fade">
@@ -123,9 +125,20 @@ onBeforeUnmount(() => {
123
125
  cursor: pointer;
124
126
  }
125
127
 
126
- &.inline { display: inline; }
127
- &.inline-block { display: inline-block; }
128
- &.block { display: block; }
128
+ &.inline {
129
+ & { display: inline; }
130
+ .trigger { display: inline; }
131
+ }
132
+
133
+ &.inline-block {
134
+ & { display: inline-block; }
135
+ .trigger { display: inline-block; }
136
+ }
137
+
138
+ &.block {
139
+ & { display: block; }
140
+ .trigger { display: block; }
141
+ }
129
142
  }
130
143
 
131
144
  .trigger {
@@ -11,7 +11,7 @@ export function useD<T extends Record<string, any>>(data: T): D<T> {
11
11
  const refData = ref(data) as Ref<T>
12
12
 
13
13
  function init(): void {
14
- refData.value = JSON.parse(initialData)
14
+ refData.value = JSON.parse(initialData) as T
15
15
  }
16
16
 
17
17
  return {
@@ -2,6 +2,7 @@ import { type Component, type MaybeRef, type MaybeRefOrGetter } from 'vue'
2
2
  import { type Mode } from '../components/SButton.vue'
3
3
  import { type Day } from '../support/Day'
4
4
  import { type DropdownSection } from './Dropdown'
5
+ import { type Position } from './Tooltip'
5
6
 
6
7
  export interface Table<
7
8
  O extends string = string,
@@ -163,6 +164,7 @@ export interface TableCellAvatars<V = any, R = any> extends TableCellBase {
163
164
  color?: 'neutral' | 'soft' | 'mute'
164
165
  avatarCount?: number
165
166
  nameCount?: number
167
+ tooltip?: boolean | { position?: Position }
166
168
  }
167
169
 
168
170
  export interface TableCellAvatarsOption {
package/lib/http/Http.ts CHANGED
@@ -15,6 +15,7 @@ export interface HttpOptions {
15
15
  xsrfUrl?: string | false
16
16
  client?: HttpClient
17
17
  lang?: Lang
18
+ payloadKey?: string
18
19
  }
19
20
 
20
21
  export class Http {
@@ -22,6 +23,7 @@ export class Http {
22
23
  private static xsrfUrl: string | false = '/api/csrf-cookie'
23
24
  private static client: HttpClient = ofetch
24
25
  private static lang: Lang | undefined = undefined
26
+ private static payloadKey = '__payload__'
25
27
 
26
28
  static config(options: HttpOptions) {
27
29
  if (options.baseUrl) {
@@ -36,6 +38,9 @@ export class Http {
36
38
  if (options.lang) {
37
39
  Http.lang = options.lang
38
40
  }
41
+ if (options.payloadKey) {
42
+ Http.payloadKey = options.payloadKey
43
+ }
39
44
  }
40
45
 
41
46
  private async ensureXsrfToken(): Promise<string | undefined> {
@@ -101,6 +106,26 @@ export class Http {
101
106
  }
102
107
 
103
108
  async post<T = any>(url: string, body?: any, options?: FetchOptions): Promise<T> {
109
+ if (body && !(body instanceof FormData)) {
110
+ let hasFile = false
111
+
112
+ const payload = JSON.stringify(body, (_, value) => {
113
+ if (value instanceof Blob) {
114
+ hasFile = true
115
+ return undefined
116
+ }
117
+ return value
118
+ })
119
+
120
+ if (hasFile) {
121
+ const formData = this.objectToFormData(body, undefined, undefined, true)
122
+ formData.append(Http.payloadKey, payload)
123
+ body = formData
124
+ } else {
125
+ body = payload
126
+ }
127
+ }
128
+
104
129
  return this.performRequest<T>(url, { method: 'POST', body, ...options })
105
130
  }
106
131
 
@@ -117,13 +142,7 @@ export class Http {
117
142
  }
118
143
 
119
144
  async upload<T = any>(url: string, body?: any, options?: FetchOptions): Promise<T> {
120
- const formData = this.objectToFormData(body)
121
-
122
- return this.performRequest<T>(url, {
123
- method: 'POST',
124
- body: formData,
125
- ...options
126
- })
145
+ return this.post<T>(url, this.objectToFormData(body), options)
127
146
  }
128
147
 
129
148
  async download(url: string, options?: FetchOptions): Promise<void> {
@@ -143,7 +162,7 @@ export class Http {
143
162
  FileSaver.saveAs(blob, filename as string)
144
163
  }
145
164
 
146
- private objectToFormData(obj: any, form?: FormData, namespace?: string) {
165
+ private objectToFormData(obj: any, form?: FormData, namespace?: string, onlyFiles = false) {
147
166
  const fd = form || new FormData()
148
167
  let formKey: string
149
168
 
@@ -163,9 +182,12 @@ export class Http {
163
182
  && !(obj[property] instanceof Blob)
164
183
  && obj[property] !== null
165
184
  ) {
166
- this.objectToFormData(obj[property], fd, property)
185
+ this.objectToFormData(obj[property], fd, property, onlyFiles)
167
186
  } else {
168
187
  const value = obj[property] === null ? '' : obj[property]
188
+ if (onlyFiles && !(value instanceof Blob)) {
189
+ return
190
+ }
169
191
  fd.append(formKey, value)
170
192
  }
171
193
  })
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@globalbrain/sefirot",
3
- "version": "3.44.0",
4
- "packageManager": "pnpm@9.0.5",
3
+ "version": "3.46.0",
4
+ "packageManager": "pnpm@9.1.0",
5
5
  "description": "Vue Components for Global Brain Design System.",
6
6
  "author": "Kia Ishii <ka.ishii@globalbrains.com>",
7
7
  "license": "MIT",
@@ -45,9 +45,9 @@
45
45
  "@iconify/vue": "^4.1.2",
46
46
  "@types/body-scroll-lock": "^3.1.2",
47
47
  "@types/lodash-es": "^4.17.12",
48
- "@types/markdown-it": "^14.0.1",
49
- "@vue/reactivity": "^3.4.23",
50
- "@vue/runtime-core": "^3.4.23",
48
+ "@types/markdown-it": "^14.1.1",
49
+ "@vue/reactivity": "^3.4.26",
50
+ "@vue/runtime-core": "^3.4.26",
51
51
  "@vuelidate/core": "^2.0.3",
52
52
  "@vuelidate/validators": "^2.0.4",
53
53
  "@vueuse/core": "^10.9.0",
@@ -60,7 +60,7 @@
60
60
  "postcss": "^8.4.38",
61
61
  "postcss-nested": "^6.0.1",
62
62
  "v-calendar": "^3.1.2",
63
- "vue": "^3.4.23",
63
+ "vue": "^3.4.26",
64
64
  "vue-router": "^4.3.2"
65
65
  },
66
66
  "dependencies": {
@@ -70,7 +70,7 @@
70
70
  "@tinyhttp/cookie": "^2.1.0",
71
71
  "@types/file-saver": "^2.0.7",
72
72
  "@types/qs": "^6.9.15",
73
- "dayjs": "^1.11.10",
73
+ "dayjs": "^1.11.11",
74
74
  "file-saver": "^2.0.5",
75
75
  "ofetch": "^1.3.4",
76
76
  "qs": "^6.12.1"
@@ -84,12 +84,12 @@
84
84
  "@release-it/conventional-changelog": "^8.0.1",
85
85
  "@types/body-scroll-lock": "^3.1.2",
86
86
  "@types/lodash-es": "^4.17.12",
87
- "@types/markdown-it": "^14.0.1",
88
- "@types/node": "^20.12.7",
87
+ "@types/markdown-it": "^14.1.1",
88
+ "@types/node": "^20.12.10",
89
89
  "@vitejs/plugin-vue": "^5.0.4",
90
- "@vitest/coverage-v8": "^1.5.0",
91
- "@vue/reactivity": "^3.4.23",
92
- "@vue/runtime-core": "^3.4.23",
90
+ "@vitest/coverage-v8": "^1.6.0",
91
+ "@vue/reactivity": "^3.4.26",
92
+ "@vue/runtime-core": "^3.4.26",
93
93
  "@vue/test-utils": "^2.4.5",
94
94
  "@vuelidate/core": "^2.0.3",
95
95
  "@vuelidate/validators": "^2.0.4",
@@ -106,13 +106,13 @@
106
106
  "postcss": "^8.4.38",
107
107
  "postcss-nested": "^6.0.1",
108
108
  "punycode": "^2.3.1",
109
- "release-it": "^17.2.0",
109
+ "release-it": "^17.2.1",
110
110
  "typescript": "~5.4.5",
111
111
  "v-calendar": "^3.1.2",
112
- "vite": "^5.2.10",
113
- "vitepress": "^1.1.3",
114
- "vitest": "^1.5.0",
115
- "vue": "^3.4.23",
112
+ "vite": "^5.2.11",
113
+ "vitepress": "^1.1.4",
114
+ "vitest": "^1.6.0",
115
+ "vue": "^3.4.26",
116
116
  "vue-router": "^4.3.2",
117
117
  "vue-tsc": "^1.8.27"
118
118
  }