diff --git a/packages/nc-gui/components/general/FormBanner.vue b/packages/nc-gui/components/general/FormBanner.vue
index 6a609a866e..04f42a9128 100644
--- a/packages/nc-gui/components/general/FormBanner.vue
+++ b/packages/nc-gui/components/general/FormBanner.vue
@@ -19,7 +19,11 @@ const getBannerImageSrc = computed(() => {
:class="!bannerImageUrl ? 'shadow-sm' : ''"
:style="{ aspectRatio: 4 / 1 }"
>
-
+
diff --git a/packages/nc-gui/components/general/Overlay.vue b/packages/nc-gui/components/general/Overlay.vue
index a030c746a9..1f903f8d6e 100644
--- a/packages/nc-gui/components/general/Overlay.vue
+++ b/packages/nc-gui/components/general/Overlay.vue
@@ -46,13 +46,7 @@ export default {
-
+
@@ -62,7 +56,7 @@ export default {
diff --git a/packages/nc-gui/components/nc/Carousel/interface.ts b/packages/nc-gui/components/nc/Carousel/interface.ts
new file mode 100644
index 0000000000..f3d6b459cc
--- /dev/null
+++ b/packages/nc-gui/components/nc/Carousel/interface.ts
@@ -0,0 +1,24 @@
+import type { HTMLAttributes, UnwrapRef } from 'vue'
+import type useEmblaCarousel from 'embla-carousel-vue'
+import type { EmblaCarouselVueType } from 'embla-carousel-vue'
+
+export type CarouselApi = EmblaCarouselVueType[1]
+type UseCarouselParameters = Parameters
+type CarouselOptions = UseCarouselParameters[0]
+type CarouselPlugin = UseCarouselParameters[1]
+
+export type UnwrapRefCarouselApi = UnwrapRef
+
+export interface CarouselProps {
+ opts?: CarouselOptions
+ plugins?: CarouselPlugin
+ orientation?: 'horizontal' | 'vertical'
+}
+
+export interface CarouselEmits {
+ (e: 'init-api', payload: UnwrapRefCarouselApi): void
+}
+
+export interface WithClassAsProps {
+ class?: HTMLAttributes['class']
+}
diff --git a/packages/nc-gui/components/nc/Carousel/useCarousel.ts b/packages/nc-gui/components/nc/Carousel/useCarousel.ts
new file mode 100644
index 0000000000..bcbdbb599b
--- /dev/null
+++ b/packages/nc-gui/components/nc/Carousel/useCarousel.ts
@@ -0,0 +1,51 @@
+import emblaCarouselVue from 'embla-carousel-vue'
+import type { UnwrapRefCarouselApi as CarouselApi, CarouselEmits, CarouselProps } from './interface'
+
+const [useProvideCarousel, useInjectCarousel] = createInjectionState(
+ ({ opts, orientation, plugins }: CarouselProps, emits: CarouselEmits) => {
+ const [emblaNode, emblaApi] = emblaCarouselVue(
+ {
+ ...opts,
+ axis: orientation === 'horizontal' ? 'x' : 'y',
+ },
+ plugins,
+ )
+
+ function scrollPrev() {
+ emblaApi.value?.scrollPrev()
+ }
+ function scrollNext() {
+ emblaApi.value?.scrollNext()
+ }
+
+ const canScrollNext = ref(false)
+ const canScrollPrev = ref(false)
+
+ function onSelect(api: CarouselApi) {
+ canScrollNext.value = api?.canScrollNext() || false
+ canScrollPrev.value = api?.canScrollPrev() || false
+ }
+
+ onMounted(() => {
+ if (!emblaApi.value) return
+
+ emblaApi.value?.on('init', onSelect)
+ emblaApi.value?.on('reInit', onSelect)
+ emblaApi.value?.on('select', onSelect)
+
+ emits('init-api', emblaApi.value)
+ })
+
+ return { carouselRef: emblaNode, carouselApi: emblaApi, canScrollPrev, canScrollNext, scrollPrev, scrollNext, orientation }
+ },
+)
+
+function useCarousel() {
+ const carouselState = useInjectCarousel()
+
+ if (!carouselState) throw new Error('useCarousel must be used within a ')
+
+ return carouselState
+}
+
+export { useCarousel, useProvideCarousel }
diff --git a/packages/nc-gui/components/nc/Tooltip.vue b/packages/nc-gui/components/nc/Tooltip.vue
index c5c96b85e7..7ad4701885 100644
--- a/packages/nc-gui/components/nc/Tooltip.vue
+++ b/packages/nc-gui/components/nc/Tooltip.vue
@@ -8,6 +8,7 @@ interface Props {
modifierKey?: string
tooltipStyle?: CSSProperties
// force disable tooltip
+ color?: 'dark' | 'light'
disabled?: boolean
placement?: TooltipPlacement | undefined
showOnTruncateOnly?: boolean
@@ -28,6 +29,8 @@ const hideOnClick = computed(() => props.hideOnClick)
const placement = computed(() => props.placement ?? 'top')
const wrapChild = computed(() => props.wrapChild ?? 'div')
+const color = computed(() => (props.color ? props.color : 'dark'))
+
const el = ref()
const showTooltip = controlledRef(false, {
@@ -117,7 +120,7 @@ const onClick = () => {
{
.nc-tooltip.hidden {
@apply invisible;
}
-.nc-tooltip {
+.nc-tooltip-dark {
.ant-tooltip-inner {
@apply !px-2 !py-1 !rounded-lg !bg-gray-800;
}
@@ -147,4 +150,13 @@ const onClick = () => {
@apply !bg-gray-800;
}
}
+
+.nc-tooltip-light {
+ .ant-tooltip-inner {
+ @apply !px-2 !py-1 !text-gray-800 !rounded-lg !bg-gray-200;
+ }
+ .ant-tooltip-arrow-content {
+ @apply !bg-gray-200;
+ }
+}
diff --git a/packages/nc-gui/components/smartsheet/Form.vue b/packages/nc-gui/components/smartsheet/Form.vue
index 00e2e8d023..03cec5e57b 100644
--- a/packages/nc-gui/components/smartsheet/Form.vue
+++ b/packages/nc-gui/components/smartsheet/Form.vue
@@ -872,7 +872,7 @@ useEventListener(
"
style="transition: all 0.3s ease-in"
>
-
-
- {
return date.month() === selectedMonth.value.month()
}
-const getDayIndex = (date: dayjs.Dayjs) => {
- let dayIndex = date.day() - 1
- if (dayIndex === -1) {
- dayIndex = 6
- }
- return dayIndex
-}
-
const dragElement = ref(null)
const draggingId = ref(null)
diff --git a/packages/nc-gui/components/smartsheet/calendar/SideMenu.vue b/packages/nc-gui/components/smartsheet/calendar/SideMenu.vue
index 421d8da88f..27e6a1c436 100644
--- a/packages/nc-gui/components/smartsheet/calendar/SideMenu.vue
+++ b/packages/nc-gui/components/smartsheet/calendar/SideMenu.vue
@@ -582,7 +582,7 @@ onClickOutside(searchRef, toggleSearch)
-
-import { type AuditType, type CommentType, ProjectRoles } from 'nocodb-sdk'
-
-const props = defineProps<{
- loading: boolean
- primaryKey: string | null
-}>()
-
-const {
- loadComments,
- deleteComment,
- comments,
- resolveComment,
- audits,
- isAuditLoading,
- saveComment: _saveComment,
- updateComment,
-} = useExpandedFormStoreOrThrow()
-
-const { isExpandedFormCommentMode } = storeToRefs(useConfigStore())
-
-const commentsWrapperEl = ref()
-
-const commentInputRef = ref()
-
-const comment = ref('')
-
-const { copy } = useClipboard()
-
-const route = useRoute()
-
-const { dashboardUrl } = useDashboard()
-
-const { user, appInfo } = useGlobal()
-
-const basesStore = useBases()
-
-const { basesUser } = storeToRefs(basesStore)
-
-const meta = inject(MetaInj, ref())
-
-const baseUsers = computed(() => (meta.value?.base_id ? basesUser.value.get(meta.value?.base_id) || [] : []))
-
-const isExpandedFormLoading = computed(() => props.loading)
-
-const tab = ref<'comments' | 'audits'>('comments')
-
-const { isUIAllowed } = useRoles()
-
-const router = useRouter()
-
-const hasEditPermission = computed(() => isUIAllowed('commentEdit'))
-
-const editCommentValue = ref()
-
-const isEditing = ref(false)
-
-const isCommentMode = ref(false)
-
-const hoveredCommentId = ref(null)
-
-async function onEditComment() {
- if (!isEditing.value || !editCommentValue.value?.comment) return
-
- while (editCommentValue.value.comment.endsWith('
') || editCommentValue.value.comment.endsWith('\n')) {
- if (editCommentValue.value.comment.endsWith('
')) {
- editCommentValue.value.comment = editCommentValue.value.comment.slice(0, -6)
- } else {
- editCommentValue.value.comment = editCommentValue.value.comment.slice(0, -2)
- }
- }
-
- isCommentMode.value = true
-
- const tempCom = {
- ...editCommentValue.value,
- }
-
- isEditing.value = false
- editCommentValue.value = undefined
- await updateComment(tempCom.id!, {
- comment: tempCom.comment,
- })
- loadComments()
-}
-
-function onCancel(e: KeyboardEvent) {
- if (!isEditing.value) return
- e.preventDefault()
- e.stopPropagation()
- editCommentValue.value = undefined
- loadComments()
- isEditing.value = false
- editCommentValue.value = undefined
-}
-
-function editComment(comment: CommentType) {
- editCommentValue.value = {
- ...comment,
- }
- isEditing.value = true
- nextTick(() => {
- scrollToComment(comment.id)
- })
-}
-
-const value = computed({
- get() {
- return editCommentValue.value?.comment || ''
- },
- set(val) {
- if (!editCommentValue.value) return
- editCommentValue.value.comment = val
- },
-})
-
-function scrollComments() {
- if (commentsWrapperEl.value) {
- commentsWrapperEl.value.scrollTo({
- top: commentsWrapperEl.value.scrollHeight,
- behavior: 'smooth',
- })
- }
-}
-
-const saveComment = async () => {
- if (!comment.value.trim()) return
-
- while (comment.value.endsWith('
') || comment.value.endsWith('\n')) {
- if (comment.value.endsWith('
')) {
- comment.value = comment.value.slice(0, -6)
- } else {
- comment.value = comment.value.slice(0, -2)
- }
- }
-
- isCommentMode.value = true
-
- // Optimistic Insert
- comments.value = [
- ...comments.value,
- {
- id: `temp-${new Date().getTime()}`,
- comment: comment.value,
- created_at: new Date().toISOString(),
- created_by: user.value?.id,
- created_by_email: user.value?.email,
- created_display_name: user.value?.display_name ?? '',
- },
- ]
-
- const tempCom = comment.value
- comment.value = ''
-
- commentInputRef?.value?.setEditorContent('', true)
- await nextTick(() => {
- scrollComments()
- })
-
- try {
- await _saveComment(tempCom)
- await nextTick(() => {
- isExpandedFormCommentMode.value = true
- })
- scrollComments()
- } catch (e) {
- console.error(e)
- }
-}
-
-const copyComment = async (comment: CommentType) => {
- await copy(
- encodeURI(
- `${dashboardUrl?.value}#/${route.params.typeOrId}/${route.params.baseId}/${meta.value?.id}?rowId=${props.primaryKey}&commentId=${comment.id}`,
- ),
- )
-}
-
-function scrollToComment(commentId: string) {
- const commentEl = document.querySelector(`.${commentId}`)
- if (commentEl) {
- commentEl.scrollIntoView({
- behavior: 'smooth',
- block: 'center',
- })
- }
-}
-
-function scrollToAudit(auditId?: string) {
- if (!auditId) return
-
- const auditEl = commentsWrapperEl.value?.querySelector(`.nc-audit-item.${auditId}`)
- if (auditEl) {
- auditEl.scrollIntoView({
- behavior: 'smooth',
- block: 'center',
- })
- }
-}
-
-watch(commentsWrapperEl, () => {
- setTimeout(() => {
- nextTick(() => {
- const query = router.currentRoute.value.query
- const commentId = query.commentId
- if (commentId) {
- router.push({
- query: {
- rowId: query.rowId,
- },
- })
- scrollToComment(commentId as string)
-
- hoveredCommentId.value = commentId as string
-
- onClickOutside(document.querySelector(`.${hoveredCommentId.value}`)! as HTMLDivElement, handleResetHoverEffect)
- } else {
- scrollComments()
- }
- })
- }, 100)
-})
-
-const createdBy = (
- comment: CommentType & {
- created_display_name?: string
- },
-) => {
- if (comment.created_by === user.value?.id) {
- return 'You'
- } else if (comment.created_display_name?.trim()) {
- return comment.created_display_name || 'Shared source'
- } else if (comment.created_by_email) {
- return comment.created_by_email
- } else {
- return 'Shared source'
- }
-}
-
-const createdByAudit = (
- comment: AuditType & {
- created_display_name?: string
- },
-) => {
- if (comment.user === user.value?.email) {
- return 'You'
- } else if (comment.created_display_name?.trim()) {
- return comment.created_display_name || 'Shared source'
- } else if (comment.user) {
- return comment.user
- } else {
- return 'Shared source'
- }
-}
-
-const getUserRole = (email: string) => {
- const user = baseUsers.value.find((user) => user.email === email)
- if (!user) return ProjectRoles.NO_ACCESS
-
- return user.roles || ProjectRoles.NO_ACCESS
-}
-
-const editedAt = (comment: CommentType) => {
- if (comment.updated_at !== comment.created_at && comment.updated_at) {
- const str = timeAgo(comment.updated_at).replace(' ', '_')
- return `[(edited)](a~~~###~~~Edited_${str}) `
- }
- return ''
-}
-
-function handleResetHoverEffect() {
- if (!hoveredCommentId.value) return
-
- hoveredCommentId.value = null
-}
-
-watch(
- () => audits.value.length,
- (auditCount) => {
- nextTick(() => {
- setTimeout(() => {
- scrollToAudit(audits.value[auditCount - 1]?.id)
- }, 100)
- })
- },
-)
-
-
-
-
-
-
-
-
-
- Comments
-
-
-
-
-
-
-
-
-
-
-
-
- {{ hasEditPermission ? $t('activity.startCommenting') : $t('activity.noCommentsYet') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('title.comingSoon') }}
-
-
-
- Audits
-
-
-
-
-
- Audits
-
-
-
-
-
-
-
-
-
diff --git a/packages/nc-gui/components/smartsheet/expanded-form/Sidebar/Audits.vue b/packages/nc-gui/components/smartsheet/expanded-form/Sidebar/Audits.vue
new file mode 100644
index 0000000000..cd46ed9c45
--- /dev/null
+++ b/packages/nc-gui/components/smartsheet/expanded-form/Sidebar/Audits.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
diff --git a/packages/nc-gui/components/smartsheet/expanded-form/Sidebar/Comments.vue b/packages/nc-gui/components/smartsheet/expanded-form/Sidebar/Comments.vue
new file mode 100644
index 0000000000..cdf2d0e5ed
--- /dev/null
+++ b/packages/nc-gui/components/smartsheet/expanded-form/Sidebar/Comments.vue
@@ -0,0 +1,488 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ hasEditPermission ? $t('activity.startCommenting') : $t('activity.noCommentsYet') }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/nc-gui/components/smartsheet/expanded-form/Sidebar/index.vue b/packages/nc-gui/components/smartsheet/expanded-form/Sidebar/index.vue
new file mode 100644
index 0000000000..9a324c59e3
--- /dev/null
+++ b/packages/nc-gui/components/smartsheet/expanded-form/Sidebar/index.vue
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+ Comments
+
+
+
+
+
+
+
+
+ {{ $t('title.comingSoon') }}
+
+
+
+ Audits
+
+
+
+
+
+ Audits
+
+
+
+
+
+
+
+
+
diff --git a/packages/nc-gui/components/smartsheet/expanded-form/index.vue b/packages/nc-gui/components/smartsheet/expanded-form/index.vue
index 79195050b3..8513bdc757 100644
--- a/packages/nc-gui/components/smartsheet/expanded-form/index.vue
+++ b/packages/nc-gui/components/smartsheet/expanded-form/index.vue
@@ -342,7 +342,7 @@ if (isKanban.value) {
provide(IsExpandedFormOpenInj, isExpanded)
const triggerRowLoad = async (rowId?: string) => {
- await Promise.allSettled([loadComments(rowId), loadAudits(rowId), _loadRow(rowId)])
+ await Promise.allSettled([loadComments(rowId, false), loadAudits(rowId), _loadRow(rowId)])
isLoading.value = false
}
@@ -795,7 +795,7 @@ export default {
:ref="i ? null : (el: any) => (cellWrapperEl = el)"
class="bg-white flex-1
@@ -972,7 +972,7 @@ export default {
:class="{ active: commentsDrawer && isUIAllowed('commentList') }"
class="nc-comments-drawer border-l-1 relative border-gray-200 bg-gray-50 w-1/3 max-w-[340px] min-w-0 h-full xs:hidden rounded-br-2xl"
>
-
+
@@ -1055,12 +1055,14 @@ export default {
@apply !rounded-lg;
transition: all 0.3s;
- &:not(.nc-readonly-div-data-cell):not(.nc-system-field) {
+ &:not(.nc-readonly-div-data-cell):not(.nc-system-field):not(.nc-attachment-cell) {
box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.08);
}
&:not(:focus-within):hover:not(.nc-readonly-div-data-cell):not(.nc-system-field) {
@apply !border-1;
- box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.24);
+ &:not(.nc-attachment-cell) {
+ box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.24);
+ }
}
&.nc-readonly-div-data-cell,
diff --git a/packages/nc-gui/components/smartsheet/grid/Table.vue b/packages/nc-gui/components/smartsheet/grid/Table.vue
index 727e5c356f..74b819c6c4 100644
--- a/packages/nc-gui/components/smartsheet/grid/Table.vue
+++ b/packages/nc-gui/components/smartsheet/grid/Table.vue
@@ -128,6 +128,7 @@ const {
isViewColumnsLoading: _isViewColumnsLoading,
updateGridViewColumn,
gridViewCols,
+ metaColumnById,
resizingColOldWith,
} = useViewColumnsOrThrow()
@@ -1102,12 +1103,33 @@ const saveOrUpdateRecords = async (
// #Grid Resize
const onresize = (colID: string | undefined, event: any) => {
if (!colID) return
- updateGridViewColumn(colID, { width: event.detail })
+
+ // Set 80px minimum width for attachment cells
+ if (metaColumnById.value[colID].uidt === UITypes.Attachment) {
+ const size = event.detail.split('px')[0]
+ if (+size < 80) {
+ updateGridViewColumn(colID, { width: '80px' })
+ } else {
+ updateGridViewColumn(colID, { width: event.detail })
+ }
+ } else {
+ updateGridViewColumn(colID, { width: event.detail })
+ }
}
const onXcResizing = (cn: string | undefined, event: any) => {
if (!cn) return
- gridViewCols.value[cn].width = `${event.detail}`
+ // Set 80px minimum width for attachment cells
+ if (metaColumnById.value[cn].uidt === UITypes.Attachment) {
+ const size = event.detail.split('px')[0]
+ if (+size < 80) {
+ gridViewCols.value[cn].width = '80px'
+ } else {
+ gridViewCols.value[cn].width = `${event.detail}`
+ }
+ } else {
+ gridViewCols.value[cn].width = `${event.detail}`
+ }
}
const onXcStartResizing = (cn: string | undefined, event: any) => {
diff --git a/packages/nc-gui/components/virtual-cell/components/ListItem.vue b/packages/nc-gui/components/virtual-cell/components/ListItem.vue
index b703638b23..952f34a6f4 100644
--- a/packages/nc-gui/components/virtual-cell/components/ListItem.vue
+++ b/packages/nc-gui/components/virtual-cell/components/ListItem.vue
@@ -88,7 +88,7 @@ const displayValue = computed(() => {
-
- >([])
-
const audits = ref>([])
- const isCommentsLoading = ref(false)
-
const isAuditLoading = ref(false)
const commentsDrawer = ref(true)
@@ -61,6 +50,9 @@ const [useProvideExpandedFormStore, useExpandedFormStore] = useInjectionState((m
const reloadTrigger = inject(ReloadRowDataHookInj, createEventHook())
+ const { comments, resolveComment, loadComments, updateComment, deleteComment, saveComment, isCommentsLoading } =
+ useProvideRowComments(meta, row)
+
const { isUIAllowed } = useRoles()
// getters
@@ -101,78 +93,6 @@ const [useProvideExpandedFormStore, useExpandedFormStore] = useInjectionState((m
return extractPkFromRow(row.value.row, meta.value.columns as ColumnType[])
})
- const loadComments = async (_rowId?: string) => {
- if (!isUIAllowed('commentList') || (!row.value && !_rowId)) return
-
- const rowId = _rowId ?? extractPkFromRow(row.value.row, meta.value.columns as ColumnType[])
-
- if (!rowId) return
-
- try {
- isCommentsLoading.value = true
-
- const res = ((
- await $api.utils.commentList({
- row_id: rowId,
- fk_model_id: meta.value.id as string,
- })
- ).list || []) as Array<
- CommentType & {
- created_display_name: string
- }
- >
-
- comments.value = res.map((comment) => {
- const user = baseUsers.value.find((u) => u.id === comment.created_by)
- const resolvedUser = comment.resolved_by ? baseUsers.value.find((u) => u.id === comment.resolved_by) : null
- return {
- ...comment,
- created_display_name: user?.display_name ?? (user?.email ?? '').split('@')[0],
- resolved_display_name: resolvedUser ? resolvedUser.display_name ?? resolvedUser.email.split('@')[0] : null,
- }
- })
- } catch (e: unknown) {
- message.error(
- await extractSdkResponseErrorMsg(
- e as Error & {
- response: any
- },
- ),
- )
- } finally {
- isCommentsLoading.value = false
- }
- }
-
- const deleteComment = async (commentId: string) => {
- if (!isUIAllowed('commentDelete')) return
- const tempC = comments.value.find((c) => c.id === commentId)
-
- try {
- comments.value = comments.value.filter((c) => c.id !== commentId)
-
- await $api.utils.commentDelete(commentId)
-
- // update comment count in rowMeta
- Object.assign(row.value, {
- ...row.value,
- rowMeta: {
- ...row.value.rowMeta,
- commentCount: (row.value.rowMeta.commentCount ?? 1) - 1,
- },
- })
- } catch (e: unknown) {
- message.error(
- await extractSdkResponseErrorMsg(
- e as Error & {
- response: any
- },
- ),
- )
- comments.value = [...comments.value, tempC]
- }
- }
-
const loadAudits = async (_rowId?: string, showLoading: boolean = true) => {
if (!isUIAllowed('auditListRow') || isEeUI || (!row.value && !_rowId)) return
@@ -224,84 +144,6 @@ const [useProvideExpandedFormStore, useExpandedFormStore] = useInjectionState((m
}
}
- const resolveComment = async (commentId: string) => {
- if (!isUIAllowed('commentResolve')) return
- const tempC = comments.value.find((c) => c.id === commentId)
-
- try {
- comments.value = comments.value.map((c) => {
- if (c.id === commentId) {
- return {
- ...c,
- resolved_by: tempC.resolved_by ? null : $state.user?.value?.id,
- resolved_by_email: tempC.resolved_by ? null : $state.user?.value?.email,
- resolved_display_name: tempC.resolved_by
- ? null
- : $state.user?.value?.display_name ?? $state.user?.value?.email.split('@')[0],
- }
- }
- return c
- })
- await $api.utils.commentResolve(commentId)
- } catch (e: unknown) {
- comments.value = comments.value.map((c) => {
- if (c.id === commentId) {
- return tempC
- }
- return c
- })
- message.error(
- await extractSdkResponseErrorMsg(
- e as Error & {
- response: any
- },
- ),
- )
- }
- }
-
- const saveComment = async (comment: string) => {
- try {
- if (!row.value || !comment) {
- comments.value = comments.value.filter((c) => !c.id?.startsWith('temp-'))
- return
- }
-
- const rowId = extractPkFromRow(row.value.row, meta.value.columns as ColumnType[])
-
- if (!rowId) return
-
- await $api.utils.commentRow({
- fk_model_id: meta.value?.id as string,
- row_id: rowId,
- comment: `${comment}`.replace(/(
)+$/g, ''),
- })
-
- // Increase Comment Count in rowMeta
- Object.assign(row.value, {
- rowMeta: {
- ...row.value.rowMeta,
- commentCount: (row.value.rowMeta.commentCount ?? 0) + 1,
- },
- })
-
- // reloadTrigger?.trigger()
-
- await loadComments()
- } catch (e: any) {
- comments.value = comments.value.filter((c) => !(c.id ?? '').startsWith('temp-'))
- message.error(
- await extractSdkResponseErrorMsg(
- e as Error & {
- response: any
- },
- ),
- )
- }
-
- $e('a:row-expand:comment')
- }
-
const save = async (
ltarState: Record = {},
undo = false,
@@ -536,37 +378,6 @@ const [useProvideExpandedFormStore, useExpandedFormStore] = useInjectionState((m
}
}
- const updateComment = async (commentId: string, comment: Partial) => {
- const tempEdit = comments.value.find((c) => c.id === commentId)
- try {
- comments.value = comments.value.map((c) => {
- if (c.id === commentId) {
- return {
- ...c,
- ...comment,
- updated_at: new Date().toISOString(),
- }
- }
- return c
- })
- await $api.utils.commentUpdate(commentId, comment)
- } catch (e: any) {
- comments.value = comments.value.map((c) => {
- if (c.id === commentId) {
- return tempEdit
- }
- return c
- })
- message.error(
- await extractSdkResponseErrorMsg(
- e as Error & {
- response: any
- },
- ),
- )
- }
- }
-
return {
...rowStore,
loadComments,
diff --git a/packages/nc-gui/composables/useRowComments.ts b/packages/nc-gui/composables/useRowComments.ts
new file mode 100644
index 0000000000..a45ce8b6c7
--- /dev/null
+++ b/packages/nc-gui/composables/useRowComments.ts
@@ -0,0 +1,235 @@
+import type { ColumnType, CommentType, TableType } from 'nocodb-sdk'
+
+const [useProvideRowComments, useRowComments] = useInjectionState((meta: Ref, row: Ref) => {
+ const isCommentsLoading = ref(false)
+
+ const { isUIAllowed } = useRoles()
+
+ const { $e, $state, $api } = useNuxtApp()
+
+ const comments = ref<
+ Array<
+ CommentType & {
+ created_display_name: string
+ resolved_display_name?: string
+ }
+ >
+ >([])
+
+ const basesStore = useBases()
+
+ const { basesUser } = storeToRefs(basesStore)
+
+ const baseUsers = computed(() => (meta.value.base_id ? basesUser.value.get(meta.value.base_id) || [] : []))
+
+ const loadComments = async (_rowId?: string, ignoreLoadingIndicator = true) => {
+ if (!isUIAllowed('commentList') || (!row.value && !_rowId)) return
+
+ const rowId = _rowId ?? extractPkFromRow(row.value.row, meta.value.columns as ColumnType[])
+
+ if (!rowId) return
+
+ try {
+ if (!ignoreLoadingIndicator) isCommentsLoading.value = true
+
+ const res = ((
+ await $api.utils.commentList({
+ row_id: rowId,
+ fk_model_id: meta.value.id as string,
+ })
+ ).list || []) as Array<
+ CommentType & {
+ created_display_name: string
+ }
+ >
+
+ comments.value = res.map((comment) => {
+ const user = baseUsers.value.find((u) => u.id === comment.created_by)
+ const resolvedUser = comment.resolved_by ? baseUsers.value.find((u) => u.id === comment.resolved_by) : null
+ return {
+ ...comment,
+ created_display_name: user?.display_name ?? (user?.email ?? '').split('@')[0],
+ resolved_display_name: resolvedUser ? resolvedUser.display_name ?? resolvedUser.email.split('@')[0] : undefined,
+ }
+ })
+ } catch (e: unknown) {
+ message.error(
+ await extractSdkResponseErrorMsg(
+ e as Error & {
+ response: any
+ },
+ ),
+ )
+ } finally {
+ if (!ignoreLoadingIndicator) isCommentsLoading.value = false
+ }
+ }
+
+ const deleteComment = async (commentId: string) => {
+ if (!isUIAllowed('commentDelete')) return
+ const tempC = comments.value.find((c) => c.id === commentId)
+
+ if (!tempC) return
+
+ try {
+ comments.value = comments.value.filter((c) => c.id !== commentId)
+
+ await $api.utils.commentDelete(commentId)
+
+ // update comment count in rowMeta
+ Object.assign(row.value, {
+ ...row.value,
+ rowMeta: {
+ ...row.value.rowMeta,
+ commentCount: (row.value.rowMeta.commentCount ?? 1) - 1,
+ },
+ })
+ } catch (e: unknown) {
+ message.error(
+ await extractSdkResponseErrorMsg(
+ e as Error & {
+ response: any
+ },
+ ),
+ )
+ comments.value = [...comments.value, tempC]
+ }
+ }
+
+ const resolveComment = async (commentId: string) => {
+ if (!isUIAllowed('commentResolve')) return
+ const tempC = comments.value.find((c) => c.id === commentId)
+
+ if (!tempC) return
+
+ try {
+ comments.value = comments.value.map((c) => {
+ if (c.id === commentId) {
+ return {
+ ...c,
+ resolved_by: tempC.resolved_by ? undefined : $state.user?.value?.id,
+ resolved_by_email: tempC.resolved_by ? undefined : $state.user?.value?.email,
+ resolved_display_name: tempC.resolved_by
+ ? undefined
+ : $state.user?.value?.display_name ?? $state.user?.value?.email.split('@')[0],
+ }
+ }
+ return c
+ })
+ await $api.utils.commentResolve(commentId, {})
+ } catch (e: unknown) {
+ comments.value = comments.value.map((c) => {
+ if (c.id === commentId) {
+ return tempC
+ }
+ return c
+ })
+ message.error(
+ await extractSdkResponseErrorMsg(
+ e as Error & {
+ response: any
+ },
+ ),
+ )
+ }
+ }
+
+ const saveComment = async (comment: string) => {
+ try {
+ if (!row.value || !comment) {
+ comments.value = comments.value.filter((c) => !c.id?.startsWith('temp-'))
+ return
+ }
+
+ const rowId = extractPkFromRow(row.value.row, meta.value.columns as ColumnType[])
+
+ if (!rowId) return
+
+ await $api.utils.commentRow({
+ fk_model_id: meta.value?.id as string,
+ row_id: rowId,
+ comment: `${comment}`.replace(/(
)+$/g, ''),
+ })
+
+ // Increase Comment Count in rowMeta
+ Object.assign(row.value, {
+ rowMeta: {
+ ...row.value.rowMeta,
+ commentCount: (row.value.rowMeta.commentCount ?? 0) + 1,
+ },
+ })
+
+ // reloadTrigger?.trigger()
+
+ await loadComments()
+ } catch (e: any) {
+ comments.value = comments.value.filter((c) => !(c.id ?? '').startsWith('temp-'))
+ message.error(
+ await extractSdkResponseErrorMsg(
+ e as Error & {
+ response: any
+ },
+ ),
+ )
+ }
+
+ $e('a:row-expand:comment')
+ }
+
+ const updateComment = async (commentId: string, comment: Partial) => {
+ const tempEdit = comments.value.find((c) => c.id === commentId)
+ if (!tempEdit) return
+ try {
+ comments.value = comments.value.map((c) => {
+ if (c.id === commentId) {
+ return {
+ ...c,
+ ...comment,
+ updated_at: new Date().toISOString(),
+ }
+ }
+ return c
+ })
+ await $api.utils.commentUpdate(commentId, comment)
+ } catch (e: any) {
+ comments.value = comments.value.map((c) => {
+ if (c.id === commentId) {
+ return tempEdit
+ }
+ return c
+ })
+ message.error(
+ await extractSdkResponseErrorMsg(
+ e as Error & {
+ response: any
+ },
+ ),
+ )
+ }
+ }
+
+ const primaryKey = computed(() => {
+ return extractPkFromRow(row.value.row, meta.value.columns as ColumnType[])
+ })
+
+ return {
+ comments,
+ loadComments,
+ saveComment,
+ updateComment,
+ resolveComment,
+ deleteComment,
+ isCommentsLoading,
+ primaryKey,
+ }
+})
+
+export { useProvideRowComments }
+
+export function useRowCommentsOrThrow() {
+ const rowComments = useRowComments()
+ if (!rowComments) {
+ throw new Error('useRowComments is not provided')
+ }
+ return rowComments
+}
diff --git a/packages/nc-gui/lang/en.json b/packages/nc-gui/lang/en.json
index a63e301dc9..b373cba87a 100644
--- a/packages/nc-gui/lang/en.json
+++ b/packages/nc-gui/lang/en.json
@@ -391,7 +391,7 @@
"title": {
"webcam": "Webcam",
"uploadViaUrl": "Upload via URL",
- "localFiles": "Local Files",
+ "localFiles": "Local files",
"renameBase": "Rename Base",
"renameWorkspace": "Rename Workspace",
"renamingWorkspace": "Renaming Workspace",
diff --git a/packages/nc-gui/package.json b/packages/nc-gui/package.json
index 37c7eff766..bf9026a3d2 100644
--- a/packages/nc-gui/package.json
+++ b/packages/nc-gui/package.json
@@ -62,6 +62,7 @@
"dagre": "^0.8.5",
"dayjs": "^1.11.11",
"deep-object-diff": "^1.1.9",
+ "embla-carousel-vue": "^8.1.7",
"emoji-mart-vue-fast": "^15.0.2",
"file-saver": "^2.0.5",
"fuse.js": "^6.6.2",
@@ -79,7 +80,10 @@
"nocodb-sdk": "workspace:^",
"papaparse": "^5.4.1",
"parse-github-url": "^1.0.2",
+ "pdfobject": "^2.3.0",
+ "pdfobject-vue": "^0.0.4",
"pinia": "^2.1.7",
+ "plyr": "^3.7.8",
"qrcode": "^1.5.3",
"rfdc": "^1.3.1",
"showdown": "^2.1.0",
diff --git a/packages/nc-gui/plugins/pdf-object.ts b/packages/nc-gui/plugins/pdf-object.ts
new file mode 100644
index 0000000000..51f3a4fce7
--- /dev/null
+++ b/packages/nc-gui/plugins/pdf-object.ts
@@ -0,0 +1,5 @@
+import PDFObjectPlugin from 'pdfobject-vue'
+
+export default defineNuxtPlugin((nuxtApp) => {
+ nuxtApp.vueApp.use(PDFObjectPlugin)
+})
diff --git a/packages/nc-gui/utils/fileUtils.ts b/packages/nc-gui/utils/fileUtils.ts
index 521bbf6e7c..0a4a54eec0 100644
--- a/packages/nc-gui/utils/fileUtils.ts
+++ b/packages/nc-gui/utils/fileUtils.ts
@@ -15,11 +15,80 @@ const imageExt = [
'heic-sequence',
]
+const videoExt = [
+ 'webm',
+ 'mpg',
+ 'mp2',
+ 'mp3',
+ 'mpeg',
+ 'ogg',
+ 'mp4',
+ 'm4v',
+ 'avi',
+ 'wmv',
+ 'mov',
+ 'qt',
+ 'flv',
+ 'mkv',
+ '3gp',
+ '3g2',
+ 'vob',
+ 'ts',
+]
+
+const officeExt = [
+ 'txt',
+ 'css',
+ 'html',
+ 'php',
+ 'c',
+ 'cpp',
+ 'h',
+ 'hpp',
+ 'js',
+ 'doc',
+ 'docx',
+ 'xls',
+ 'xlsx',
+ 'ppt',
+ 'pptx',
+ 'pdf',
+ 'pages',
+ 'ai',
+ 'psd',
+ 'tiff',
+ 'dxf',
+ 'svg',
+ 'eps',
+ 'ps',
+ 'ttf',
+ 'xps',
+ 'zip',
+ 'rar',
+ 'csv',
+]
+
+const isAudio = (name: string, mimetype?: string) => {
+ return name?.toLowerCase().endsWith('.mp3') || mimetype?.startsWith('audio/')
+}
+
+const isVideo = (name: string, mimetype?: string) => {
+ return videoExt.some((e) => name?.toLowerCase().endsWith(`.${e}`)) || mimetype?.startsWith('video/')
+}
+
const isImage = (name: string, mimetype?: string) => {
return imageExt.some((e) => name?.toLowerCase().endsWith(`.${e}`)) || mimetype?.startsWith('image/')
}
-export { isImage, imageExt }
+const isPdf = (name: string, mimetype?: string) => {
+ return name?.toLowerCase().endsWith('.pdf') || mimetype?.startsWith('application/pdf')
+}
+
+const isOffice = (name: string, _mimetype?: string) => {
+ return officeExt.some((e) => name?.toLowerCase().endsWith(`.${e}`))
+}
+
+export { isImage, imageExt, isVideo, isPdf, isOffice, isAudio }
// Ref : https://stackoverflow.com/a/12002275
// Tested in Mozilla Firefox browser, Chrome
diff --git a/packages/nc-gui/utils/iconUtils.ts b/packages/nc-gui/utils/iconUtils.ts
index 89cdc89804..d94b2d8630 100644
--- a/packages/nc-gui/utils/iconUtils.ts
+++ b/packages/nc-gui/utils/iconUtils.ts
@@ -40,6 +40,7 @@ import Phishing from '~icons/material-symbols/phishing-outline-rounded'
import MdiAccountGroup from '~icons/mdi/account-group'
import MdiDotsVertical from '~icons/mdi/dots-vertical'
import MdiDotsHorizontal from '~icons/mdi/dots-horizontal'
+import MdiPdf from '~icons/mdi/file-pdf'
import PhExcelThin from '~icons/ph/microsoft-excel-logo-light'
import VscodeIconsExcelColored from '~icons/vscode-icons/file-type-excel'
import PhCsvThin from '~icons/ph/file-csv'
@@ -204,6 +205,9 @@ import NcMaximize from '~icons/nc-icons/maximize'
import NcMaximizeAll from '~icons/nc-icons/maximize-all'
import NcDrag from '~icons/nc-icons/drag'
import NcRefresh from '~icons/nc-icons/refresh'
+import NcPlay from '~icons/nc-icons/play'
+import GoogleDocs from '~icons/nc-icons/google-docs'
+import NcGlobe from '~icons/nc-icons/globe'
// keep it for reference
// todo: remove it after all icons are migrated
@@ -638,6 +642,10 @@ export const iconMap = {
ncDrag: NcDrag,
refresh: NcRefresh,
chevronUpDown: NcChevronUpDown,
+ play: NcPlay,
+ googleDocs: GoogleDocs,
+ pdfFile: MdiPdf,
+ globe: NcGlobe,
}
export const getMdiIcon = (type: string): any => {
diff --git a/packages/nocodb-sdk/src/lib/Api.ts b/packages/nocodb-sdk/src/lib/Api.ts
index 36373d1c4e..e95c9b80e0 100644
--- a/packages/nocodb-sdk/src/lib/Api.ts
+++ b/packages/nocodb-sdk/src/lib/Api.ts
@@ -9332,6 +9332,55 @@ export class Api<
...params,
}),
+ /**
+ * @description Download attachment from a shared view
+ *
+ * @tags Public
+ * @name DataAttachmentDownload
+ * @summary Get Shared View Attachment
+ * @request GET:/api/v2/public/shared-view/{sharedViewUuid}/downloadAttachment/{columnId}/{rowId}
+ * @response `200` `{
+ \** URL to download the attachment *\
+ url?: string,
+ \** Path to download the attachment *\
+ path?: string,
+
+}` OK
+ * @response `400` `{
+ \** @example BadRequest [Error]: *\
+ msg: string,
+
+}`
+ */
+ dataAttachmentDownload: (
+ sharedViewUuid: string,
+ columnId: IdType,
+ rowId: any,
+ query?: {
+ /** URL or Path of the attachment */
+ urlOrPath?: string;
+ },
+ params: RequestParams = {}
+ ) =>
+ this.request<
+ {
+ /** URL to download the attachment */
+ url?: string;
+ /** Path to download the attachment */
+ path?: string;
+ },
+ {
+ /** @example BadRequest [Error]: */
+ msg: string;
+ }
+ >({
+ path: `/api/v2/public/shared-view/${sharedViewUuid}/downloadAttachment/${columnId}/${rowId}`,
+ method: 'GET',
+ query: query,
+ format: 'json',
+ ...params,
+ }),
+
/**
* @description List Shared View Grouped Data
*
@@ -11826,6 +11875,47 @@ export class Api<
...params,
}),
+ /**
+ * @description Download attachment from a given row
+ *
+ * @tags DB Data Table Row
+ * @name AttachmentDownload
+ * @summary Download Attachment
+ * @request GET:/api/v2/downloadAttachment/{modelId}/{columnId}/{rowId}
+ * @response `200` `{
+ \** URL to download attachment *\
+ url?: string,
+ \** Path to download attachment *\
+ path?: string,
+
+}` OK
+ */
+ attachmentDownload: (
+ modelId: string,
+ columnId: string,
+ rowId: string,
+ query?: {
+ /** URL or Path of the attachment */
+ urlOrPath?: string;
+ },
+ params: RequestParams = {}
+ ) =>
+ this.request<
+ {
+ /** URL to download attachment */
+ url?: string;
+ /** Path to download attachment */
+ path?: string;
+ },
+ any
+ >({
+ path: `/api/v2/downloadAttachment/${modelId}/${columnId}/${rowId}`,
+ method: 'GET',
+ query: query,
+ format: 'json',
+ ...params,
+ }),
+
/**
* @description Copy links from the one cell and paste them into another cell or delete all records from cell
*
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 63cf9098b6..db41cf9c8d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -39,19 +39,19 @@ importers:
dependencies:
'@braks/revue-draggable':
specifier: ^0.4.3
- version: 0.4.3(vue@3.4.33)
+ version: 0.4.3(vue@3.4.34)
'@ckpack/vue-color':
specifier: ^1.5.0
- version: 1.5.0(vue@3.4.33)
+ version: 1.5.0(vue@3.4.34)
'@iconify/vue':
specifier: ^4.1.2
- version: 4.1.2(vue@3.4.33)
+ version: 4.1.2(vue@3.4.34)
'@nuxt/image':
specifier: ^1.3.0
version: 1.3.0
'@pinia/nuxt':
specifier: ^0.5.1
- version: 0.5.1(vue@3.4.33)
+ version: 0.5.1(vue@3.4.34)
'@tiptap/extension-link':
specifier: ^2.4.0
version: 2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0)
@@ -75,28 +75,28 @@ importers:
version: 2.4.0(@tiptap/pm@2.4.0)
'@tiptap/vue-3':
specifier: 2.4.0
- version: 2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0)(vue@3.4.33)
+ version: 2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0)(vue@3.4.34)
'@vue-flow/additional-components':
specifier: ^1.3.3
- version: 1.3.3(@vue-flow/core@1.31.0)(vue@3.4.33)
+ version: 1.3.3(@vue-flow/core@1.31.0)(vue@3.4.34)
'@vue-flow/core':
specifier: ^1.30.1
- version: 1.31.0(vue@3.4.33)
+ version: 1.31.0(vue@3.4.34)
'@vuelidate/core':
specifier: ^2.0.3
- version: 2.0.3(vue@3.4.33)
+ version: 2.0.3(vue@3.4.34)
'@vuelidate/validators':
specifier: ^2.0.4
- version: 2.0.4(vue@3.4.33)
+ version: 2.0.4(vue@3.4.34)
'@vueuse/core':
specifier: ^10.7.2
- version: 10.7.2(vue@3.4.33)
+ version: 10.7.2(vue@3.4.34)
'@vueuse/integrations':
specifier: ^10.7.2
- version: 10.7.2(fuse.js@6.6.2)(jwt-decode@3.1.2)(qrcode@1.5.3)(sortablejs@1.15.2)(vue@3.4.33)
+ version: 10.7.2(fuse.js@6.6.2)(jwt-decode@3.1.2)(qrcode@1.5.3)(sortablejs@1.15.2)(vue@3.4.34)
ant-design-vue:
specifier: ^3.2.20
- version: 3.2.20(vue@3.4.33)
+ version: 3.2.20(vue@3.4.34)
chart.js:
specifier: ^4.4.2
version: 4.4.2
@@ -115,9 +115,12 @@ importers:
deep-object-diff:
specifier: ^1.1.9
version: 1.1.9
+ embla-carousel-vue:
+ specifier: ^8.1.7
+ version: 8.1.7(vue@3.4.34)
emoji-mart-vue-fast:
specifier: ^15.0.2
- version: 15.0.2(vue@3.4.33)
+ version: 15.0.2(vue@3.4.34)
file-saver:
specifier: ^2.0.5
version: 2.0.5
@@ -166,9 +169,18 @@ importers:
parse-github-url:
specifier: ^1.0.2
version: 1.0.2
+ pdfobject:
+ specifier: ^2.3.0
+ version: 2.3.0
+ pdfobject-vue:
+ specifier: ^0.0.4
+ version: 0.0.4(pdfobject@2.3.0)(vue@3.4.34)
pinia:
specifier: ^2.1.7
- version: 2.1.7(vue@3.4.33)
+ version: 2.1.7(vue@3.4.34)
+ plyr:
+ specifier: ^3.7.8
+ version: 3.7.8
qrcode:
specifier: ^1.5.3
version: 1.5.3
@@ -204,28 +216,28 @@ importers:
version: 13.11.0
vue-advanced-cropper:
specifier: ^2.8.8
- version: 2.8.8(vue@3.4.33)
+ version: 2.8.8(vue@3.4.34)
vue-barcode-reader:
specifier: ^1.0.3
version: 1.0.3
vue-chartjs:
specifier: ^5.3.1
- version: 5.3.1(chart.js@4.4.2)(vue@3.4.33)
+ version: 5.3.1(chart.js@4.4.2)(vue@3.4.34)
vue-dompurify-html:
specifier: ^3.1.2
- version: 3.1.2(vue@3.4.33)
+ version: 3.1.2(vue@3.4.34)
vue-github-button:
specifier: ^3.1.0
version: 3.1.0
vue-i18n:
specifier: ^9.9.1
- version: 9.9.1(vue@3.4.33)
+ version: 9.9.1(vue@3.4.34)
vue-qrcode-reader:
specifier: 3.1.9
version: 3.1.9
vue3-calendar-heatmap:
specifier: ^2.0.5
- version: 2.0.5(tippy.js@6.3.7)(vue@3.4.33)
+ version: 2.0.5(tippy.js@6.3.7)(vue@3.4.34)
vue3-contextmenu:
specifier: ^0.2.12
version: 0.2.12
@@ -234,10 +246,10 @@ importers:
version: 1.0.7
vue3-text-clamp:
specifier: ^0.1.2
- version: 0.1.2(resize-detector@0.3.0)(vue@3.4.33)
+ version: 0.1.2(resize-detector@0.3.0)(vue@3.4.34)
vuedraggable:
specifier: ^4.1.0
- version: 4.1.0(vue@3.4.33)
+ version: 4.1.0(vue@3.4.34)
xlsx:
specifier: https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz
version: '@cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz'
@@ -373,7 +385,7 @@ importers:
version: 2.4.6
'@vueuse/nuxt':
specifier: ^10.7.2
- version: 10.7.2(nuxt@3.11.2)(vue@3.4.33)
+ version: 10.7.2(nuxt@3.11.2)(vue@3.4.34)
'@windicss/plugin-animations':
specifier: ^1.0.9
version: 1.0.9
@@ -415,7 +427,7 @@ importers:
version: 0.18.5(@vue/compiler-sfc@3.4.27)
unplugin-vue-components:
specifier: ^0.26.0
- version: 0.26.0(vue@3.4.33)
+ version: 0.26.0(vue@3.4.34)
vite-plugin-monaco-editor:
specifier: ^1.1.0
version: 1.1.0(monaco-editor@0.45.0)
@@ -1173,14 +1185,14 @@ packages:
resolution: {integrity: sha512-4QBZg8ccyC6LPIRii7A0bZUk3+lEDCLnhB+FVsflGdcWPPmV+j3fire4AwwoqHV/BibgvBmR9ZIo4s867smv+g==}
dev: false
- /@ant-design/icons-vue@6.1.0(vue@3.4.33):
+ /@ant-design/icons-vue@6.1.0(vue@3.4.34):
resolution: {integrity: sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==}
peerDependencies:
vue: latest
dependencies:
'@ant-design/colors': 6.0.0
'@ant-design/icons-svg': 4.3.1
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
dev: false
/@antfu/eslint-config-basic@0.26.3(@typescript-eslint/parser@5.62.0)(eslint@8.56.0):
@@ -3154,7 +3166,7 @@ packages:
engines: {node: '>=8.9'}
dev: false
- /@braks/revue-draggable@0.4.3(vue@3.4.33):
+ /@braks/revue-draggable@0.4.3(vue@3.4.34):
resolution: {integrity: sha512-wmsfNHJQgSX0HFA726r+cm6ixYs+z/KLxfg1cx6xZ1PBGeZsuQCACdNdoKckyr/IH8FgIbBoIH0/6QiSbW3tEQ==}
peerDependencies:
'@vue/composition-api': ^1.0.0-rc.1
@@ -3163,12 +3175,12 @@ packages:
'@vue/composition-api':
optional: true
dependencies:
- '@vueuse/core': 7.7.1(vue@3.4.33)
- vue: 3.4.33(typescript@5.4.5)
- vue-demi: 0.14.8(vue@3.4.33)
+ '@vueuse/core': 7.7.1(vue@3.4.34)
+ vue: 3.4.34(typescript@5.4.5)
+ vue-demi: 0.14.9(vue@3.4.34)
dev: false
- /@ckpack/vue-color@1.5.0(vue@3.4.33):
+ /@ckpack/vue-color@1.5.0(vue@3.4.34):
resolution: {integrity: sha512-dj1zXVyay2m4LdlLJCQSdIS2FYwUl77BZqyKmUXiehyqjCP0bGYnPcL38lrShzYUc2FdkYQX8ANZZjRahd4PQw==}
engines: {node: '>=12'}
peerDependencies:
@@ -3176,7 +3188,7 @@ packages:
dependencies:
'@ctrl/tinycolor': 3.6.1
material-colors: 1.2.6
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
dev: false
/@clickhouse/client-common@0.2.9:
@@ -4452,13 +4464,13 @@ packages:
- supports-color
dev: true
- /@iconify/vue@4.1.2(vue@3.4.33):
+ /@iconify/vue@4.1.2(vue@3.4.34):
resolution: {integrity: sha512-CQnYqLiQD5LOAaXhBrmj1mdL2/NCJvwcC4jtW2Z8ukhThiFkLDkutarTOV2trfc9EXqUqRs0KqXOL9pZ/IyysA==}
peerDependencies:
vue: latest
dependencies:
'@iconify/types': 2.0.0
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
dev: false
/@img/sharp-darwin-arm64@0.33.2:
@@ -4762,7 +4774,7 @@ packages:
magic-string: 0.30.10
mlly: 1.6.1
source-map-js: 1.2.0
- vue-i18n: 9.9.1(vue@3.4.33)
+ vue-i18n: 9.9.1(vue@3.4.34)
yaml-eslint-parser: 1.2.2
dev: true
@@ -4811,7 +4823,7 @@ packages:
picocolors: 1.0.0
source-map-js: 1.0.2
unplugin: 1.5.1
- vue-i18n: 9.9.1(vue@3.4.33)
+ vue-i18n: 9.9.1(vue@3.4.34)
transitivePeerDependencies:
- rollup
- supports-color
@@ -6014,7 +6026,7 @@ packages:
semver: 7.6.2
dev: true
- /@nuxt/devtools@1.3.1(@unocss/reset@0.58.9)(floating-vue@5.2.2)(fuse.js@6.6.2)(jwt-decode@3.1.2)(nuxt@3.11.2)(qrcode@1.5.3)(sortablejs@1.15.2)(unocss@0.58.9)(vite@4.5.3)(vue@3.4.33):
+ /@nuxt/devtools@1.3.1(@unocss/reset@0.58.9)(floating-vue@5.2.2)(fuse.js@6.6.2)(jwt-decode@3.1.2)(nuxt@3.11.2)(qrcode@1.5.3)(sortablejs@1.15.2)(unocss@0.58.9)(vite@4.5.3)(vue@3.4.34):
resolution: {integrity: sha512-SuiuqtlN6OMPn7hYqbydcJmRF/L86yxi8ApcjNVnMURYBPaAAN9egkEFpQ6AjzjX+UnaG1hU8FE0w6pWKSRp3A==}
hasBin: true
peerDependencies:
@@ -6025,9 +6037,9 @@ packages:
'@nuxt/devtools-kit': 1.3.1(nuxt@3.11.2)(vite@4.5.3)
'@nuxt/devtools-wizard': 1.3.1
'@nuxt/kit': 3.11.2
- '@vue/devtools-applet': 7.2.0(@unocss/reset@0.58.9)(floating-vue@5.2.2)(fuse.js@6.6.2)(jwt-decode@3.1.2)(qrcode@1.5.3)(sortablejs@1.15.2)(unocss@0.58.9)(vite@4.5.3)(vue@3.4.33)
- '@vue/devtools-core': 7.2.0(vite@4.5.3)(vue@3.4.33)
- '@vue/devtools-kit': 7.2.0(vue@3.4.33)
+ '@vue/devtools-applet': 7.2.0(@unocss/reset@0.58.9)(floating-vue@5.2.2)(fuse.js@6.6.2)(jwt-decode@3.1.2)(qrcode@1.5.3)(sortablejs@1.15.2)(unocss@0.58.9)(vite@4.5.3)(vue@3.4.34)
+ '@vue/devtools-core': 7.2.0(vite@4.5.3)(vue@3.4.34)
+ '@vue/devtools-kit': 7.2.0(vue@3.4.34)
birpc: 0.2.17
consola: 3.2.3
cronstrue: 2.50.0
@@ -6386,7 +6398,7 @@ packages:
resolution: {integrity: sha512-3BG5doAREcD50dbKyXgmjD4b1GzY8CUy3T41jMhHZXNDdaNwOd31IBq+D6dV00OSrDVhzrTVj0IxsUsnMyHvIQ==}
dev: true
- /@nuxt/vite-builder@3.11.2(eslint@8.56.0)(sass@1.71.1)(vue@3.4.33):
+ /@nuxt/vite-builder@3.11.2(eslint@8.56.0)(sass@1.71.1)(vue@3.4.34):
resolution: {integrity: sha512-eXTZsAAN4dPz4eA2UD5YU2kD/DqgfyQp1UYsIdCe6+PAVe1ifkUboBjbc0piR5+3qI/S/eqk3nzxRGbiYF7Ccg==}
engines: {node: ^14.18.0 || >=16.10.0}
peerDependencies:
@@ -6394,8 +6406,8 @@ packages:
dependencies:
'@nuxt/kit': 3.11.2
'@rollup/plugin-replace': 5.0.5(rollup@3.29.4)
- '@vitejs/plugin-vue': 5.0.4(vite@5.2.11)(vue@3.4.33)
- '@vitejs/plugin-vue-jsx': 3.1.0(vite@5.2.11)(vue@3.4.33)
+ '@vitejs/plugin-vue': 5.0.4(vite@5.2.11)(vue@3.4.34)
+ '@vitejs/plugin-vue-jsx': 3.1.0(vite@5.2.11)(vue@3.4.34)
autoprefixer: 10.4.19(postcss@8.4.39)
clear: 0.1.0
consola: 3.2.3
@@ -6425,7 +6437,7 @@ packages:
vite: 5.2.11(sass@1.71.1)
vite-node: 1.6.0(sass@1.71.1)
vite-plugin-checker: 0.6.4(eslint@8.56.0)(vite@5.2.11)
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
vue-bundle-renderer: 2.0.0
transitivePeerDependencies:
- '@types/node'
@@ -7278,11 +7290,11 @@ packages:
'@parcel/watcher-win32-x64': 2.4.1
dev: true
- /@pinia/nuxt@0.5.1(vue@3.4.33):
+ /@pinia/nuxt@0.5.1(vue@3.4.34):
resolution: {integrity: sha512-6wT6TqY81n+7/x3Yhf0yfaJVKkZU42AGqOR0T3+UvChcaOJhSma7OWPN64v+ptYlznat+fS1VTwNAcbi2lzHnw==}
dependencies:
'@nuxt/kit': 3.9.3
- pinia: 2.1.7(vue@3.4.33)
+ pinia: 2.1.7(vue@3.4.34)
transitivePeerDependencies:
- '@vue/composition-api'
- rollup
@@ -9258,7 +9270,7 @@ packages:
- '@tiptap/pm'
dev: false
- /@tiptap/vue-3@2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0)(vue@3.4.33):
+ /@tiptap/vue-3@2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0)(vue@3.4.34):
resolution: {integrity: sha512-NCw1Y4ScIrMCKC9YlepUHSAB8jq/PQ2f+AbZKh5bY2t/kMSJYLCJVHq9NFzG4TQtktgMGWCcEQVcDJ7YNpsfxw==}
peerDependencies:
'@tiptap/core': ^2.0.0
@@ -9269,7 +9281,7 @@ packages:
'@tiptap/extension-bubble-menu': 2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0)
'@tiptap/extension-floating-menu': 2.4.0(@tiptap/core@2.4.0)(@tiptap/pm@2.4.0)
'@tiptap/pm': 2.4.0
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
dev: false
/@tootallnate/once@1.1.2:
@@ -9770,7 +9782,7 @@ packages:
/@types/splitpanes@2.2.6:
resolution: {integrity: sha512-3dV5sO1Ht74iER4jJU03mreL3f+Q2h47ZqXS6Sfbqc6hkCvsDrX1GA0NbYWRdNvZemPyTDzUoApWKeoGbALwkQ==}
dependencies:
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
transitivePeerDependencies:
- typescript
dev: true
@@ -9833,7 +9845,7 @@ packages:
/@types/vue-barcode-reader@0.0.3:
resolution: {integrity: sha512-klrzMKXdc1eHFnMQXl5QwTGuKki09hh+hxV0AlNjg72VpMRifEbW+roGbDK0LHCK+LTcz13Ebx2/bMKgQr0Ovw==}
dependencies:
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
transitivePeerDependencies:
- typescript
dev: true
@@ -10317,7 +10329,7 @@ packages:
'@unhead/shared': 1.9.10
dev: true
- /@unhead/vue@1.9.10(vue@3.4.33):
+ /@unhead/vue@1.9.10(vue@3.4.34):
resolution: {integrity: sha512-Zi65eTU5IIaqqXAVOVJ4fnwJRR751FZIFlzYOjIekf1eNkISy+A4xyz3NIEQWSlXCrOiDNgDhT0YgKUcx5FfHQ==}
peerDependencies:
vue: latest
@@ -10326,7 +10338,7 @@ packages:
'@unhead/shared': 1.9.10
hookable: 5.5.3
unhead: 1.9.10
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
dev: true
/@unocss/astro@0.58.9(vite@4.5.3):
@@ -10609,7 +10621,7 @@ packages:
- supports-color
dev: true
- /@vitejs/plugin-vue-jsx@3.1.0(vite@5.2.11)(vue@3.4.33):
+ /@vitejs/plugin-vue-jsx@3.1.0(vite@5.2.11)(vue@3.4.34):
resolution: {integrity: sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
@@ -10620,12 +10632,12 @@ packages:
'@babel/plugin-transform-typescript': 7.24.1(@babel/core@7.24.3)
'@vue/babel-plugin-jsx': 1.1.5(@babel/core@7.24.3)
vite: 5.2.11(sass@1.71.1)
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
transitivePeerDependencies:
- supports-color
dev: true
- /@vitejs/plugin-vue@5.0.4(vite@5.2.11)(vue@3.4.33):
+ /@vitejs/plugin-vue@5.0.4(vite@5.2.11)(vue@3.4.34):
resolution: {integrity: sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==}
engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies:
@@ -10633,7 +10645,7 @@ packages:
vue: latest
dependencies:
vite: 5.2.11(sass@1.71.1)
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
dev: true
/@vitest/expect@1.2.2:
@@ -10698,33 +10710,33 @@ packages:
pretty-format: 29.7.0
dev: true
- /@vue-flow/additional-components@1.3.3(@vue-flow/core@1.31.0)(vue@3.4.33):
+ /@vue-flow/additional-components@1.3.3(@vue-flow/core@1.31.0)(vue@3.4.34):
resolution: {integrity: sha512-AZhz0diM7VIN7MGKODiuqiu+xiujFQSs2UdiThgNI5vGSwwizd0g9dGzB+LK0Dt4FCRJ1g64xzxqbrAFFfzuFw==}
peerDependencies:
'@vue-flow/core': ^1.0.0
vue: latest
dependencies:
- '@vue-flow/core': 1.31.0(vue@3.4.33)
+ '@vue-flow/core': 1.31.0(vue@3.4.34)
d3-selection: 3.0.0
d3-zoom: 3.0.0
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
dev: false
- /@vue-flow/core@1.31.0(vue@3.4.33):
+ /@vue-flow/core@1.31.0(vue@3.4.34):
resolution: {integrity: sha512-LKKe856250UglAo2sU3OYYAU8i2I31tze1qZGOwG5d73QA2w6aYwiV3Ut3nmohAQIYhBrvkYcygyJ0iQ+HH1VA==}
peerDependencies:
vue: latest
dependencies:
- '@vueuse/core': 10.7.2(vue@3.4.33)
+ '@vueuse/core': 10.7.2(vue@3.4.34)
d3-drag: 3.0.0
d3-selection: 3.0.0
d3-zoom: 3.0.0
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
transitivePeerDependencies:
- '@vue/composition-api'
dev: false
- /@vue-macros/common@1.8.0(vue@3.4.33):
+ /@vue-macros/common@1.8.0(vue@3.4.34):
resolution: {integrity: sha512-auDJJzE0z3uRe3867e0DsqcseKImktNf5ojCZgUKqiVxb2yTlwlgOVAYCgoep9oITqxkXQymSvFeKhedi8PhaA==}
engines: {node: '>=16.14.0'}
peerDependencies:
@@ -10739,7 +10751,7 @@ packages:
ast-kit: 0.11.2
local-pkg: 0.4.3
magic-string-ast: 0.3.0
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
transitivePeerDependencies:
- rollup
dev: true
@@ -10784,6 +10796,16 @@ packages:
entities: 4.5.0
estree-walker: 2.0.2
source-map-js: 1.2.0
+ dev: true
+
+ /@vue/compiler-core@3.4.34:
+ resolution: {integrity: sha512-Z0izUf32+wAnQewjHu+pQf1yw00EGOmevl1kE+ljjjMe7oEfpQ+BI3/JNK7yMB4IrUsqLDmPecUrpj3mCP+yJQ==}
+ dependencies:
+ '@babel/parser': 7.24.7
+ '@vue/shared': 3.4.34
+ entities: 4.5.0
+ estree-walker: 2.0.2
+ source-map-js: 1.2.0
/@vue/compiler-dom@3.4.27:
resolution: {integrity: sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==}
@@ -10796,6 +10818,13 @@ packages:
dependencies:
'@vue/compiler-core': 3.4.33
'@vue/shared': 3.4.33
+ dev: true
+
+ /@vue/compiler-dom@3.4.34:
+ resolution: {integrity: sha512-3PUOTS1h5cskdOJMExCu2TInXuM0j60DRPpSCJDqOCupCfUZCJoyQmKtRmA8EgDNZ5kcEE7vketamRZfrEuVDw==}
+ dependencies:
+ '@vue/compiler-core': 3.4.34
+ '@vue/shared': 3.4.34
/@vue/compiler-sfc@3.4.27:
resolution: {integrity: sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==}
@@ -10823,6 +10852,20 @@ packages:
magic-string: 0.30.10
postcss: 8.4.39
source-map-js: 1.2.0
+ dev: true
+
+ /@vue/compiler-sfc@3.4.34:
+ resolution: {integrity: sha512-x6lm0UrM03jjDXTPZgD9Ad8bIVD1ifWNit2EaWQIZB5CULr46+FbLQ5RpK7AXtDHGjx9rmvC7QRCTjsiGkAwRw==}
+ dependencies:
+ '@babel/parser': 7.24.7
+ '@vue/compiler-core': 3.4.34
+ '@vue/compiler-dom': 3.4.34
+ '@vue/compiler-ssr': 3.4.34
+ '@vue/shared': 3.4.34
+ estree-walker: 2.0.2
+ magic-string: 0.30.10
+ postcss: 8.4.39
+ source-map-js: 1.2.0
/@vue/compiler-ssr@3.4.27:
resolution: {integrity: sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw==}
@@ -10835,6 +10878,13 @@ packages:
dependencies:
'@vue/compiler-dom': 3.4.33
'@vue/shared': 3.4.33
+ dev: true
+
+ /@vue/compiler-ssr@3.4.34:
+ resolution: {integrity: sha512-8TDBcLaTrFm5rnF+Qm4BlliaopJgqJ28Nsrc80qazynm5aJO+Emu7y0RWw34L8dNnTRdcVBpWzJxhGYzsoVu4g==}
+ dependencies:
+ '@vue/compiler-dom': 3.4.34
+ '@vue/shared': 3.4.34
/@vue/devtools-api@6.5.0:
resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==}
@@ -10843,21 +10893,21 @@ packages:
resolution: {integrity: sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==}
dev: true
- /@vue/devtools-applet@7.2.0(@unocss/reset@0.58.9)(floating-vue@5.2.2)(fuse.js@6.6.2)(jwt-decode@3.1.2)(qrcode@1.5.3)(sortablejs@1.15.2)(unocss@0.58.9)(vite@4.5.3)(vue@3.4.33):
+ /@vue/devtools-applet@7.2.0(@unocss/reset@0.58.9)(floating-vue@5.2.2)(fuse.js@6.6.2)(jwt-decode@3.1.2)(qrcode@1.5.3)(sortablejs@1.15.2)(unocss@0.58.9)(vite@4.5.3)(vue@3.4.34):
resolution: {integrity: sha512-ohl3uHejqu8v6BoCfsadpo6/QU1o585Im8AbH4bZiQTKdIot7OlBdk7pz9bK3muV6N1xKuiDNwYul0QYClOeSg==}
peerDependencies:
vue: latest
dependencies:
- '@vue/devtools-core': 7.2.0(vite@4.5.3)(vue@3.4.33)
- '@vue/devtools-kit': 7.2.0(vue@3.4.33)
+ '@vue/devtools-core': 7.2.0(vite@4.5.3)(vue@3.4.34)
+ '@vue/devtools-kit': 7.2.0(vue@3.4.34)
'@vue/devtools-shared': 7.2.0
- '@vue/devtools-ui': 7.2.0(@unocss/reset@0.58.9)(floating-vue@5.2.2)(fuse.js@6.6.2)(jwt-decode@3.1.2)(qrcode@1.5.3)(sortablejs@1.15.2)(unocss@0.58.9)(vue@3.4.33)
+ '@vue/devtools-ui': 7.2.0(@unocss/reset@0.58.9)(floating-vue@5.2.2)(fuse.js@6.6.2)(jwt-decode@3.1.2)(qrcode@1.5.3)(sortablejs@1.15.2)(unocss@0.58.9)(vue@3.4.34)
lodash-es: 4.17.21
perfect-debounce: 1.0.0
shiki: 1.5.2
splitpanes: 3.1.5
- vue: 3.4.33(typescript@5.4.5)
- vue-virtual-scroller: 2.0.0-beta.8(vue@3.4.33)
+ vue: 3.4.34(typescript@5.4.5)
+ vue-virtual-scroller: 2.0.0-beta.8(vue@3.4.34)
transitivePeerDependencies:
- '@unocss/reset'
- '@vue/composition-api'
@@ -10877,10 +10927,10 @@ packages:
- vite
dev: true
- /@vue/devtools-core@7.2.0(vite@4.5.3)(vue@3.4.33):
+ /@vue/devtools-core@7.2.0(vite@4.5.3)(vue@3.4.34):
resolution: {integrity: sha512-cHSeu70rTtubt2DYia+VDGNTC1m84Xyuk5eNTjmOpMLECaJnWnzCv6kR84EZp7rG+MVZalJG+4ecX2GaTbU3cQ==}
dependencies:
- '@vue/devtools-kit': 7.2.0(vue@3.4.33)
+ '@vue/devtools-kit': 7.2.0(vue@3.4.34)
'@vue/devtools-shared': 7.2.0
mitt: 3.0.1
nanoid: 3.3.7
@@ -10891,7 +10941,7 @@ packages:
- vue
dev: true
- /@vue/devtools-kit@7.2.0(vue@3.4.33):
+ /@vue/devtools-kit@7.2.0(vue@3.4.34):
resolution: {integrity: sha512-Kx+U0QiQg/g714euYKfnCdhTcOycSlH1oyTE57D0sAmisdsRCNLfXcnnIwcFY2jdCpuz9DNbuE0VWQuYF5zAZQ==}
peerDependencies:
vue: latest
@@ -10901,7 +10951,7 @@ packages:
mitt: 3.0.1
perfect-debounce: 1.0.0
speakingurl: 14.0.1
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
dev: true
/@vue/devtools-shared@7.2.0:
@@ -10910,7 +10960,7 @@ packages:
rfdc: 1.3.1
dev: true
- /@vue/devtools-ui@7.2.0(@unocss/reset@0.58.9)(floating-vue@5.2.2)(fuse.js@6.6.2)(jwt-decode@3.1.2)(qrcode@1.5.3)(sortablejs@1.15.2)(unocss@0.58.9)(vue@3.4.33):
+ /@vue/devtools-ui@7.2.0(@unocss/reset@0.58.9)(floating-vue@5.2.2)(fuse.js@6.6.2)(jwt-decode@3.1.2)(qrcode@1.5.3)(sortablejs@1.15.2)(unocss@0.58.9)(vue@3.4.34):
resolution: {integrity: sha512-5raf2DLgicnT6vr9oO8kgN49ZqdDYtyph4hBH3sg9bvY2UtHgJs6m8uPqai5vKSrrEy/V30Rq/tahQlOiEbi+Q==}
peerDependencies:
'@unocss/reset': '>=0.50.0-0'
@@ -10920,14 +10970,14 @@ packages:
dependencies:
'@unocss/reset': 0.58.9
'@vue/devtools-shared': 7.2.0
- '@vueuse/components': 10.9.0(vue@3.4.33)
- '@vueuse/core': 10.9.0(vue@3.4.33)
- '@vueuse/integrations': 10.9.0(focus-trap@7.5.4)(fuse.js@6.6.2)(jwt-decode@3.1.2)(qrcode@1.5.3)(sortablejs@1.15.2)(vue@3.4.33)
+ '@vueuse/components': 10.9.0(vue@3.4.34)
+ '@vueuse/core': 10.9.0(vue@3.4.34)
+ '@vueuse/integrations': 10.9.0(focus-trap@7.5.4)(fuse.js@6.6.2)(jwt-decode@3.1.2)(qrcode@1.5.3)(sortablejs@1.15.2)(vue@3.4.34)
colord: 2.9.3
- floating-vue: 5.2.2(vue@3.4.33)
+ floating-vue: 5.2.2(vue@3.4.34)
focus-trap: 7.5.4
unocss: 0.58.9(@unocss/webpack@0.58.9)(postcss@8.4.39)(vite@4.5.3)
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
transitivePeerDependencies:
- '@vue/composition-api'
- async-validator
@@ -10943,43 +10993,43 @@ packages:
- universal-cookie
dev: true
- /@vue/reactivity@3.4.33:
- resolution: {integrity: sha512-B24QIelahDbyHipBgbUItQblbd4w5HpG3KccL+YkGyo3maXyS253FzcTR3pSz739OTphmzlxP7JxEMWBpewilA==}
+ /@vue/reactivity@3.4.34:
+ resolution: {integrity: sha512-ua+Lo+wBRlBEX9TtgPOShE2JwIO7p6BTZ7t1KZVPoaBRfqbC7N3c8Mpzicx173fXxx5VXeU6ykiHo7WgLzJQDA==}
dependencies:
- '@vue/shared': 3.4.33
+ '@vue/shared': 3.4.34
- /@vue/runtime-core@3.4.33:
- resolution: {integrity: sha512-6wavthExzT4iAxpe8q37/rDmf44nyOJGISJPxCi9YsQO+8w9v0gLCFLfH5TzD1V1AYrTAdiF4Y1cgUmP68jP6w==}
+ /@vue/runtime-core@3.4.34:
+ resolution: {integrity: sha512-PXhkiRPwcPGJ1BnyBZFI96GfInCVskd0HPNIAZn7i3YOmLbtbTZpB7/kDTwC1W7IqdGPkTVC63IS7J2nZs4Ebg==}
dependencies:
- '@vue/reactivity': 3.4.33
- '@vue/shared': 3.4.33
+ '@vue/reactivity': 3.4.34
+ '@vue/shared': 3.4.34
- /@vue/runtime-dom@3.4.33:
- resolution: {integrity: sha512-iHsMCUSFJ+4z432Bn9kZzHX+zOXa6+iw36DaVRmKYZpPt9jW9riF32SxNwB124i61kp9+AZtheQ/mKoJLerAaQ==}
+ /@vue/runtime-dom@3.4.34:
+ resolution: {integrity: sha512-dXqIe+RqFAK2Euak4UsvbIupalrhc67OuQKpD7HJ3W2fv8jlqvI7szfBCsAEcE8o/wyNpkloxB6J8viuF/E3gw==}
dependencies:
- '@vue/reactivity': 3.4.33
- '@vue/runtime-core': 3.4.33
- '@vue/shared': 3.4.33
+ '@vue/reactivity': 3.4.34
+ '@vue/runtime-core': 3.4.34
+ '@vue/shared': 3.4.34
csstype: 3.1.3
- /@vue/server-renderer@3.4.27(vue@3.4.33):
+ /@vue/server-renderer@3.4.27(vue@3.4.34):
resolution: {integrity: sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA==}
peerDependencies:
vue: latest
dependencies:
'@vue/compiler-ssr': 3.4.27
'@vue/shared': 3.4.27
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
dev: false
- /@vue/server-renderer@3.4.33(vue@3.4.33):
- resolution: {integrity: sha512-jTH0d6gQcaYideFP/k0WdEu8PpRS9MF8d0b6SfZzNi+ap972pZ0TNIeTaESwdOtdY0XPVj54XEJ6K0wXxir4fw==}
+ /@vue/server-renderer@3.4.34(vue@3.4.34):
+ resolution: {integrity: sha512-GeyEUfMVRZMD/mZcNONEqg7MiU10QQ1DB3O/Qr6+8uXpbwdlmVgQ5Qs1/ZUAFX1X2UUtqMoGrDRbxdWfOJFT7Q==}
peerDependencies:
vue: latest
dependencies:
- '@vue/compiler-ssr': 3.4.33
- '@vue/shared': 3.4.33
- vue: 3.4.33(typescript@5.4.5)
+ '@vue/compiler-ssr': 3.4.34
+ '@vue/shared': 3.4.34
+ vue: 3.4.34(typescript@5.4.5)
/@vue/shared@3.4.21:
resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==}
@@ -10990,6 +11040,10 @@ packages:
/@vue/shared@3.4.33:
resolution: {integrity: sha512-aoRY0jQk3A/cuvdkodTrM4NMfxco8n55eG4H7ML/CRy7OryHfiqvug4xrCBBMbbN+dvXAetDDwZW9DXWWjBntA==}
+ dev: true
+
+ /@vue/shared@3.4.34:
+ resolution: {integrity: sha512-x5LmiRLpRsd9KTjAB8MPKf0CDPMcuItjP0gbNqFCIgL1I8iYp4zglhj9w9FPCdIbHG2M91RVeIbArFfFTz9I3A==}
/@vue/test-utils@2.4.6:
resolution: {integrity: sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==}
@@ -10998,7 +11052,7 @@ packages:
vue-component-type-helpers: 2.0.6
dev: true
- /@vuelidate/core@2.0.3(vue@3.4.33):
+ /@vuelidate/core@2.0.3(vue@3.4.34):
resolution: {integrity: sha512-AN6l7KF7+mEfyWG0doT96z+47ljwPpZfi9/JrNMkOGLFv27XVZvKzRLXlmDPQjPl/wOB1GNnHuc54jlCLRNqGA==}
peerDependencies:
'@vue/composition-api': ^1.0.0-rc.1
@@ -11007,11 +11061,11 @@ packages:
'@vue/composition-api':
optional: true
dependencies:
- vue: 3.4.33(typescript@5.4.5)
- vue-demi: 0.13.11(vue@3.4.33)
+ vue: 3.4.34(typescript@5.4.5)
+ vue-demi: 0.13.11(vue@3.4.34)
dev: false
- /@vuelidate/validators@2.0.4(vue@3.4.33):
+ /@vuelidate/validators@2.0.4(vue@3.4.34):
resolution: {integrity: sha512-odTxtUZ2JpwwiQ10t0QWYJkkYrfd0SyFYhdHH44QQ1jDatlZgTh/KRzrWVmn/ib9Gq7H4hFD4e8ahoo5YlUlDw==}
peerDependencies:
'@vue/composition-api': ^1.0.0-rc.1
@@ -11020,45 +11074,45 @@ packages:
'@vue/composition-api':
optional: true
dependencies:
- vue: 3.4.33(typescript@5.4.5)
- vue-demi: 0.13.11(vue@3.4.33)
+ vue: 3.4.34(typescript@5.4.5)
+ vue-demi: 0.13.11(vue@3.4.34)
dev: false
- /@vueuse/components@10.9.0(vue@3.4.33):
+ /@vueuse/components@10.9.0(vue@3.4.34):
resolution: {integrity: sha512-BHQpA0yIi3y7zKa1gYD0FUzLLkcRTqVhP8smnvsCK6GFpd94Nziq1XVPD7YpFeho0k5BzbBiNZF7V/DpkJ967A==}
dependencies:
- '@vueuse/core': 10.9.0(vue@3.4.33)
- '@vueuse/shared': 10.9.0(vue@3.4.33)
- vue-demi: 0.14.8(vue@3.4.33)
+ '@vueuse/core': 10.9.0(vue@3.4.34)
+ '@vueuse/shared': 10.9.0(vue@3.4.34)
+ vue-demi: 0.14.8(vue@3.4.34)
transitivePeerDependencies:
- '@vue/composition-api'
- vue
dev: true
- /@vueuse/core@10.7.2(vue@3.4.33):
+ /@vueuse/core@10.7.2(vue@3.4.34):
resolution: {integrity: sha512-AOyAL2rK0By62Hm+iqQn6Rbu8bfmbgaIMXcE3TSr7BdQ42wnSFlwIdPjInO62onYsEMK/yDMU8C6oGfDAtZ2qQ==}
dependencies:
'@types/web-bluetooth': 0.0.20
'@vueuse/metadata': 10.7.2
- '@vueuse/shared': 10.7.2(vue@3.4.33)
- vue-demi: 0.14.7(vue@3.4.33)
+ '@vueuse/shared': 10.7.2(vue@3.4.34)
+ vue-demi: 0.14.7(vue@3.4.34)
transitivePeerDependencies:
- '@vue/composition-api'
- vue
- /@vueuse/core@10.9.0(vue@3.4.33):
+ /@vueuse/core@10.9.0(vue@3.4.34):
resolution: {integrity: sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==}
dependencies:
'@types/web-bluetooth': 0.0.20
'@vueuse/metadata': 10.9.0
- '@vueuse/shared': 10.9.0(vue@3.4.33)
- vue-demi: 0.14.8(vue@3.4.33)
+ '@vueuse/shared': 10.9.0(vue@3.4.34)
+ vue-demi: 0.14.8(vue@3.4.34)
transitivePeerDependencies:
- '@vue/composition-api'
- vue
dev: true
- /@vueuse/core@7.7.1(vue@3.4.33):
+ /@vueuse/core@7.7.1(vue@3.4.34):
resolution: {integrity: sha512-PRRgbATMpoeUmkCEBtUeJgOwtew8s+4UsEd+Pm7MhkjL2ihCNrSqxNVtM6NFE4uP2sWnkGcZpCjPuNSxowJ1Ow==}
peerDependencies:
'@vue/composition-api': ^1.1.0
@@ -11069,12 +11123,12 @@ packages:
vue:
optional: true
dependencies:
- '@vueuse/shared': 7.7.1(vue@3.4.33)
- vue: 3.4.33(typescript@5.4.5)
- vue-demi: 0.14.8(vue@3.4.33)
+ '@vueuse/shared': 7.7.1(vue@3.4.34)
+ vue: 3.4.34(typescript@5.4.5)
+ vue-demi: 0.14.9(vue@3.4.34)
dev: false
- /@vueuse/integrations@10.7.2(fuse.js@6.6.2)(jwt-decode@3.1.2)(qrcode@1.5.3)(sortablejs@1.15.2)(vue@3.4.33):
+ /@vueuse/integrations@10.7.2(fuse.js@6.6.2)(jwt-decode@3.1.2)(qrcode@1.5.3)(sortablejs@1.15.2)(vue@3.4.34):
resolution: {integrity: sha512-+u3RLPFedjASs5EKPc69Ge49WNgqeMfSxFn+qrQTzblPXZg6+EFzhjarS5edj2qAf6xQ93f95TUxRwKStXj/sQ==}
peerDependencies:
async-validator: '*'
@@ -11115,19 +11169,19 @@ packages:
universal-cookie:
optional: true
dependencies:
- '@vueuse/core': 10.7.2(vue@3.4.33)
- '@vueuse/shared': 10.7.2(vue@3.4.33)
+ '@vueuse/core': 10.7.2(vue@3.4.34)
+ '@vueuse/shared': 10.7.2(vue@3.4.34)
fuse.js: 6.6.2
jwt-decode: 3.1.2
qrcode: 1.5.3
sortablejs: 1.15.2
- vue-demi: 0.14.7(vue@3.4.33)
+ vue-demi: 0.14.7(vue@3.4.34)
transitivePeerDependencies:
- '@vue/composition-api'
- vue
dev: false
- /@vueuse/integrations@10.9.0(focus-trap@7.5.4)(fuse.js@6.6.2)(jwt-decode@3.1.2)(qrcode@1.5.3)(sortablejs@1.15.2)(vue@3.4.33):
+ /@vueuse/integrations@10.9.0(focus-trap@7.5.4)(fuse.js@6.6.2)(jwt-decode@3.1.2)(qrcode@1.5.3)(sortablejs@1.15.2)(vue@3.4.34):
resolution: {integrity: sha512-acK+A01AYdWSvL4BZmCoJAcyHJ6EqhmkQEXbQLwev1MY7NBnS+hcEMx/BzVoR9zKI+UqEPMD9u6PsyAuiTRT4Q==}
peerDependencies:
async-validator: '*'
@@ -11168,14 +11222,14 @@ packages:
universal-cookie:
optional: true
dependencies:
- '@vueuse/core': 10.9.0(vue@3.4.33)
- '@vueuse/shared': 10.9.0(vue@3.4.33)
+ '@vueuse/core': 10.9.0(vue@3.4.34)
+ '@vueuse/shared': 10.9.0(vue@3.4.34)
focus-trap: 7.5.4
fuse.js: 6.6.2
jwt-decode: 3.1.2
qrcode: 1.5.3
sortablejs: 1.15.2
- vue-demi: 0.14.8(vue@3.4.33)
+ vue-demi: 0.14.8(vue@3.4.34)
transitivePeerDependencies:
- '@vue/composition-api'
- vue
@@ -11188,17 +11242,17 @@ packages:
resolution: {integrity: sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==}
dev: true
- /@vueuse/nuxt@10.7.2(nuxt@3.11.2)(vue@3.4.33):
+ /@vueuse/nuxt@10.7.2(nuxt@3.11.2)(vue@3.4.34):
resolution: {integrity: sha512-yv2hY4AiRoSqg9ELNpN6gOkDWxGuLiKE/bEbuTAAuUBhS5OeEDf5aB/kY0e/V6ZXj5XiU4LX3nE8YV8c+UKfmQ==}
peerDependencies:
nuxt: ^3.0.0
dependencies:
'@nuxt/kit': 3.9.3
- '@vueuse/core': 10.7.2(vue@3.4.33)
+ '@vueuse/core': 10.7.2(vue@3.4.34)
'@vueuse/metadata': 10.7.2
local-pkg: 0.5.0
nuxt: 3.11.2(@opentelemetry/api@1.4.1)(@unocss/reset@0.58.9)(eslint@8.56.0)(floating-vue@5.2.2)(fuse.js@6.6.2)(jwt-decode@3.1.2)(qrcode@1.5.3)(sass@1.71.1)(sortablejs@1.15.2)(unocss@0.58.9)(vite@4.5.3)
- vue-demi: 0.14.7(vue@3.4.33)
+ vue-demi: 0.14.7(vue@3.4.34)
transitivePeerDependencies:
- '@vue/composition-api'
- rollup
@@ -11206,24 +11260,24 @@ packages:
- vue
dev: true
- /@vueuse/shared@10.7.2(vue@3.4.33):
+ /@vueuse/shared@10.7.2(vue@3.4.34):
resolution: {integrity: sha512-qFbXoxS44pi2FkgFjPvF4h7c9oMDutpyBdcJdMYIMg9XyXli2meFMuaKn+UMgsClo//Th6+beeCgqweT/79BVA==}
dependencies:
- vue-demi: 0.14.8(vue@3.4.33)
+ vue-demi: 0.14.8(vue@3.4.34)
transitivePeerDependencies:
- '@vue/composition-api'
- vue
- /@vueuse/shared@10.9.0(vue@3.4.33):
+ /@vueuse/shared@10.9.0(vue@3.4.34):
resolution: {integrity: sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==}
dependencies:
- vue-demi: 0.14.8(vue@3.4.33)
+ vue-demi: 0.14.8(vue@3.4.34)
transitivePeerDependencies:
- '@vue/composition-api'
- vue
dev: true
- /@vueuse/shared@7.7.1(vue@3.4.33):
+ /@vueuse/shared@7.7.1(vue@3.4.34):
resolution: {integrity: sha512-rN2qd22AUl7VdBxihagWyhUNHCyVk9IpvBTTfHoLH9G7rGE552X1f+zeCfehuno0zXif13jPw+icW/wn2a0rnQ==}
peerDependencies:
'@vue/composition-api': ^1.1.0
@@ -11234,8 +11288,8 @@ packages:
vue:
optional: true
dependencies:
- vue: 3.4.33(typescript@5.4.5)
- vue-demi: 0.14.8(vue@3.4.33)
+ vue: 3.4.34(typescript@5.4.5)
+ vue-demi: 0.14.9(vue@3.4.34)
dev: false
/@webassemblyjs/ast@1.11.6:
@@ -11787,14 +11841,14 @@ packages:
engines: {node: '>=12'}
dev: true
- /ant-design-vue@3.2.20(vue@3.4.33):
+ /ant-design-vue@3.2.20(vue@3.4.34):
resolution: {integrity: sha512-YWpMfGaGoRastIXEYfCoJiaRiDHk4chqtYhlKQM5GqPt6NfvrM1Vg2e60yHtjxlZjed91wCMm0rAmyUr7Hwzdg==}
engines: {node: '>=12.22.0'}
peerDependencies:
vue: latest
dependencies:
'@ant-design/colors': 6.0.0
- '@ant-design/icons-vue': 6.1.0(vue@3.4.33)
+ '@ant-design/icons-vue': 6.1.0(vue@3.4.34)
'@babel/runtime': 7.22.11
'@ctrl/tinycolor': 3.6.1
'@simonwep/pickr': 1.8.2
@@ -11808,8 +11862,8 @@ packages:
resize-observer-polyfill: 1.5.1
scroll-into-view-if-needed: 2.2.31
shallow-equal: 1.2.1
- vue: 3.4.33(typescript@5.4.5)
- vue-types: 3.0.2(vue@3.4.33)
+ vue: 3.4.34(typescript@5.4.5)
+ vue-types: 3.0.2(vue@3.4.34)
warning: 4.0.3
dev: false
@@ -14141,6 +14195,10 @@ packages:
/csstype@3.1.3:
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+ /custom-event-polyfill@1.0.7:
+ resolution: {integrity: sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w==}
+ dev: false
+
/d3-array@3.2.4:
resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==}
engines: {node: '>=12'}
@@ -14769,18 +14827,40 @@ packages:
batch-processor: 1.0.0
dev: false
+ /embla-carousel-reactive-utils@8.1.7(embla-carousel@8.1.7):
+ resolution: {integrity: sha512-FDPcWjNtW04KSuvSfGbVeoB8yl5no3E0++HikO/uW12cNkMnWt68C4OBOakZQZlpUdRQSA9KCYoBuQzfpVGvZQ==}
+ peerDependencies:
+ embla-carousel: 8.1.7
+ dependencies:
+ embla-carousel: 8.1.7
+ dev: false
+
+ /embla-carousel-vue@8.1.7(vue@3.4.34):
+ resolution: {integrity: sha512-cYTIGghkKOeMPI154mz1L60yCW6QMnsgKssEaHHfQ7aYo8KHKlvaY47ZWr5zVpBfSoKfSbB1mgPGvZxrj6Mvpg==}
+ peerDependencies:
+ vue: latest
+ dependencies:
+ embla-carousel: 8.1.7
+ embla-carousel-reactive-utils: 8.1.7(embla-carousel@8.1.7)
+ vue: 3.4.34(typescript@5.4.5)
+ dev: false
+
+ /embla-carousel@8.1.7:
+ resolution: {integrity: sha512-b3kBr2H+S1gx4neki0P+aqN6cA5Ibjqy4CR3Ufi3X+Q3JpoNXJgOmJMSPkoP9DKcDREwADN6UWZzRwF2oo0y9Q==}
+ dev: false
+
/emittery@0.13.1:
resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
engines: {node: '>=12'}
- /emoji-mart-vue-fast@15.0.2(vue@3.4.33):
+ /emoji-mart-vue-fast@15.0.2(vue@3.4.34):
resolution: {integrity: sha512-q7VaE6yRrlQd+jpHPToh1XnIatgACkQjBj0vQ7uNaWrbVsKlhZaOsqZVoegT5IZt5XkYoR2x4MHMNep/BJP9rw==}
peerDependencies:
vue: latest
dependencies:
'@babel/runtime': 7.22.11
core-js: 3.32.1
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
dev: false
/emoji-regex@8.0.0:
@@ -16730,7 +16810,7 @@ packages:
resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
dev: true
- /floating-vue@5.2.2(vue@3.4.33):
+ /floating-vue@5.2.2(vue@3.4.34):
resolution: {integrity: sha512-afW+h2CFafo+7Y9Lvw/xsqjaQlKLdJV7h1fCHfcYQ1C4SVMlu7OAekqWgu5d4SgvkBVU0pVpLlVsrSTBURFRkg==}
peerDependencies:
'@nuxt/kit': ^3.2.0
@@ -16740,8 +16820,8 @@ packages:
optional: true
dependencies:
'@floating-ui/dom': 1.1.1
- vue: 3.4.33(typescript@5.4.5)
- vue-resize: 2.0.0-alpha.1(vue@3.4.33)
+ vue: 3.4.34(typescript@5.4.5)
+ vue-resize: 2.0.0-alpha.1(vue@3.4.34)
dev: true
/fn.name@1.1.0:
@@ -20240,6 +20320,10 @@ packages:
json5: 2.2.3
dev: true
+ /loadjs@4.3.0:
+ resolution: {integrity: sha512-vNX4ZZLJBeDEOBvdr2v/F+0aN5oMuPu7JTqrMwp+DtgK+AryOlpy6Xtm2/HpNr+azEa828oQjOtWsB6iDtSfSQ==}
+ dev: false
+
/local-pkg@0.4.3:
resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
engines: {node: '>=14'}
@@ -22018,15 +22102,15 @@ packages:
optional: true
dependencies:
'@nuxt/devalue': 2.0.2
- '@nuxt/devtools': 1.3.1(@unocss/reset@0.58.9)(floating-vue@5.2.2)(fuse.js@6.6.2)(jwt-decode@3.1.2)(nuxt@3.11.2)(qrcode@1.5.3)(sortablejs@1.15.2)(unocss@0.58.9)(vite@4.5.3)(vue@3.4.33)
+ '@nuxt/devtools': 1.3.1(@unocss/reset@0.58.9)(floating-vue@5.2.2)(fuse.js@6.6.2)(jwt-decode@3.1.2)(nuxt@3.11.2)(qrcode@1.5.3)(sortablejs@1.15.2)(unocss@0.58.9)(vite@4.5.3)(vue@3.4.34)
'@nuxt/kit': 3.11.2
'@nuxt/schema': 3.11.2
'@nuxt/telemetry': 2.5.3
'@nuxt/ui-templates': 1.3.3
- '@nuxt/vite-builder': 3.11.2(eslint@8.56.0)(sass@1.71.1)(vue@3.4.33)
+ '@nuxt/vite-builder': 3.11.2(eslint@8.56.0)(sass@1.71.1)(vue@3.4.34)
'@unhead/dom': 1.9.10
'@unhead/ssr': 1.9.10
- '@unhead/vue': 1.9.10(vue@3.4.33)
+ '@unhead/vue': 1.9.10(vue@3.4.34)
'@vue/shared': 3.4.21
acorn: 8.11.3
c12: 1.10.0
@@ -22066,13 +22150,13 @@ packages:
unenv: 1.9.0
unimport: 3.7.1
unplugin: 1.10.1
- unplugin-vue-router: 0.7.0(vue-router@4.3.0)(vue@3.4.33)
+ unplugin-vue-router: 0.7.0(vue-router@4.3.0)(vue@3.4.34)
unstorage: 1.10.2(ioredis@5.4.1)
untyped: 1.4.2
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
vue-bundle-renderer: 2.0.0
vue-devtools-stub: 0.1.0
- vue-router: 4.3.0(vue@3.4.33)
+ vue-router: 4.3.0(vue@3.4.34)
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -22897,6 +22981,20 @@ packages:
resolution: {integrity: sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==}
dev: false
+ /pdfobject-vue@0.0.4(pdfobject@2.3.0)(vue@3.4.34):
+ resolution: {integrity: sha512-sk3IqtwyC1j7Gu0rkskOgWnJgDNtCkdwkxvnLGI3xK0pMhgleNw2IWpH41FSNVuE0h5zdjjakpXsv+YH0cbXfA==}
+ peerDependencies:
+ pdfobject: ^2.2.12
+ vue: latest
+ dependencies:
+ pdfobject: 2.3.0
+ vue: 3.4.34(typescript@5.4.5)
+ dev: false
+
+ /pdfobject@2.3.0:
+ resolution: {integrity: sha512-w/9pXDXTDs3IDmOri/w8lM/w6LHR0/F4fcBLLzH+4csSoyshQ5su0TE7k0FLHZO7aOjVLDGecqd1M89+PVpVAA==}
+ dev: false
+
/pend@1.2.0:
resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
dev: false
@@ -23049,7 +23147,7 @@ packages:
engines: {node: '>=10'}
dev: true
- /pinia@2.1.7(vue@3.4.33):
+ /pinia@2.1.7(vue@3.4.34):
resolution: {integrity: sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==}
peerDependencies:
'@vue/composition-api': ^1.4.0
@@ -23062,8 +23160,8 @@ packages:
optional: true
dependencies:
'@vue/devtools-api': 6.5.0
- vue: 3.4.33(typescript@5.4.5)
- vue-demi: 0.14.6(vue@3.4.33)
+ vue: 3.4.34(typescript@5.4.5)
+ vue-demi: 0.14.6(vue@3.4.34)
dev: false
/pinkie-promise@1.0.0:
@@ -23131,6 +23229,16 @@ packages:
engines: {node: '>=4'}
dev: true
+ /plyr@3.7.8:
+ resolution: {integrity: sha512-yG/EHDobwbB/uP+4Bm6eUpJ93f8xxHjjk2dYcD1Oqpe1EcuQl5tzzw9Oq+uVAzd2lkM11qZfydSiyIpiB8pgdA==}
+ dependencies:
+ core-js: 3.32.1
+ custom-event-polyfill: 1.0.7
+ loadjs: 4.3.0
+ rangetouch: 2.0.1
+ url-polyfill: 1.1.12
+ dev: false
+
/pngjs@5.0.0:
resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==}
engines: {node: '>=10.13.0'}
@@ -24214,6 +24322,10 @@ packages:
resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
engines: {node: '>= 0.6'}
+ /rangetouch@2.0.1:
+ resolution: {integrity: sha512-sln+pNSc8NGaHoLzwNBssFSf/rSYkqeBXzX1AtJlkJiUaVSJSbRAWJk+4omsXkN+EJalzkZhWQ3th1m0FpR5xA==}
+ dev: false
+
/raw-body@2.5.1:
resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==}
engines: {node: '>= 0.8'}
@@ -27295,7 +27407,7 @@ packages:
- supports-color
dev: true
- /unplugin-vue-components@0.26.0(vue@3.4.33):
+ /unplugin-vue-components@0.26.0(vue@3.4.34):
resolution: {integrity: sha512-s7IdPDlnOvPamjunVxw8kNgKNK8A5KM1YpK5j/p97jEKTjlPNrA0nZBiSfAKKlK1gWZuyWXlKL5dk3EDw874LQ==}
engines: {node: '>=14'}
peerDependencies:
@@ -27318,13 +27430,13 @@ packages:
minimatch: 9.0.3
resolve: 1.22.4
unplugin: 1.7.1
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
transitivePeerDependencies:
- rollup
- supports-color
dev: true
- /unplugin-vue-router@0.7.0(vue-router@4.3.0)(vue@3.4.33):
+ /unplugin-vue-router@0.7.0(vue-router@4.3.0)(vue@3.4.34):
resolution: {integrity: sha512-ddRreGq0t5vlSB7OMy4e4cfU1w2AwBQCwmvW3oP/0IHQiokzbx4hd3TpwBu3eIAFVuhX2cwNQwp1U32UybTVCw==}
peerDependencies:
vue-router: ^4.1.0
@@ -27334,7 +27446,7 @@ packages:
dependencies:
'@babel/types': 7.24.0
'@rollup/pluginutils': 5.1.0(rollup@3.29.4)
- '@vue-macros/common': 1.8.0(vue@3.4.33)
+ '@vue-macros/common': 1.8.0(vue@3.4.34)
ast-walker-scope: 0.5.0
chokidar: 3.6.0
fast-glob: 3.3.2
@@ -27344,7 +27456,7 @@ packages:
pathe: 1.1.2
scule: 1.3.0
unplugin: 1.10.1
- vue-router: 4.3.0(vue@3.4.33)
+ vue-router: 4.3.0(vue@3.4.34)
yaml: 2.3.4
transitivePeerDependencies:
- rollup
@@ -27594,6 +27706,10 @@ packages:
requires-port: 1.0.0
dev: false
+ /url-polyfill@1.1.12:
+ resolution: {integrity: sha512-mYFmBHCapZjtcNHW0MDq9967t+z4Dmg5CJ0KqysK3+ZbyoNOWQHksGCTWwDhxGXllkWlOc10Xfko6v4a3ucM6A==}
+ dev: false
+
/url@0.10.3:
resolution: {integrity: sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==}
dependencies:
@@ -28162,7 +28278,7 @@ packages:
resolution: {integrity: sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==}
dev: true
- /vue-advanced-cropper@2.8.8(vue@3.4.33):
+ /vue-advanced-cropper@2.8.8(vue@3.4.34):
resolution: {integrity: sha512-yDM7Jb/gnxcs//JdbOogBUoHr1bhCQSto7/ohgETKAe4wvRpmqIkKSppMm1huVQr+GP1YoVlX/fkjKxvYzwwDQ==}
engines: {node: '>=8', npm: '>=5'}
peerDependencies:
@@ -28171,7 +28287,7 @@ packages:
classnames: 2.5.1
debounce: 1.2.1
easy-bem: 1.1.1
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
dev: false
/vue-barcode-reader@1.0.3:
@@ -28186,21 +28302,21 @@ packages:
ufo: 1.5.3
dev: true
- /vue-chartjs@5.3.1(chart.js@4.4.2)(vue@3.4.33):
+ /vue-chartjs@5.3.1(chart.js@4.4.2)(vue@3.4.34):
resolution: {integrity: sha512-rZjqcHBxKiHrBl0CIvcOlVEBwRhpWAVf6rDU3vUfa7HuSRmGtCslc0Oc8m16oAVuk0erzc1FCtH1VCriHsrz+A==}
peerDependencies:
chart.js: ^4.1.1
vue: latest
dependencies:
chart.js: 4.4.2
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
dev: false
/vue-component-type-helpers@2.0.6:
resolution: {integrity: sha512-qdGXCtoBrwqk1BT6r2+1Wcvl583ZVkuSZ3or7Y1O2w5AvWtlvvxwjGhmz5DdPJS9xqRdDlgTJ/38ehWnEi0tFA==}
dev: true
- /vue-demi@0.13.11(vue@3.4.33):
+ /vue-demi@0.13.11(vue@3.4.34):
resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==}
engines: {node: '>=12'}
hasBin: true
@@ -28212,10 +28328,10 @@ packages:
'@vue/composition-api':
optional: true
dependencies:
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
dev: false
- /vue-demi@0.14.6(vue@3.4.33):
+ /vue-demi@0.14.6(vue@3.4.34):
resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==}
engines: {node: '>=12'}
hasBin: true
@@ -28227,10 +28343,10 @@ packages:
'@vue/composition-api':
optional: true
dependencies:
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
dev: false
- /vue-demi@0.14.7(vue@3.4.33):
+ /vue-demi@0.14.7(vue@3.4.34):
resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==}
engines: {node: '>=12'}
hasBin: true
@@ -28242,9 +28358,9 @@ packages:
'@vue/composition-api':
optional: true
dependencies:
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
- /vue-demi@0.14.8(vue@3.4.33):
+ /vue-demi@0.14.8(vue@3.4.34):
resolution: {integrity: sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==}
engines: {node: '>=12'}
hasBin: true
@@ -28256,20 +28372,35 @@ packages:
'@vue/composition-api':
optional: true
dependencies:
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
+
+ /vue-demi@0.14.9(vue@3.4.34):
+ resolution: {integrity: sha512-dC1TJMODGM8lxhP6wLToncaDPPNB3biVxxRDuNCYpuXwi70ou7NsGd97KVTJ2omepGId429JZt8oaZKeXbqxwg==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: latest
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+ dependencies:
+ vue: 3.4.34(typescript@5.4.5)
+ dev: false
/vue-devtools-stub@0.1.0:
resolution: {integrity: sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ==}
dev: true
- /vue-dompurify-html@3.1.2(vue@3.4.33):
+ /vue-dompurify-html@3.1.2(vue@3.4.34):
resolution: {integrity: sha512-2xCnSuog5+OPUtmeAwPZY/6oV9YKuLhjgcl5EUw3jKbmhnyPo8YyCczCeRNGBorVcz1fCGm6PEOIUSXNS8I0ZA==}
peerDependencies:
vue: latest
dependencies:
dompurify: 2.4.7
- vue: 3.4.33(typescript@5.4.5)
- vue-demi: 0.13.11(vue@3.4.33)
+ vue: 3.4.34(typescript@5.4.5)
+ vue-demi: 0.13.11(vue@3.4.34)
transitivePeerDependencies:
- '@vue/composition-api'
dev: false
@@ -28295,11 +28426,11 @@ packages:
/vue-extensible-mail@0.0.3(typescript@5.4.5):
resolution: {integrity: sha512-X9oEe/ent1mfmAX65lld/WDVCGRBxULvXbHC21j+mOU2EVmL73xLBEh6TRENc+BPyInzm4jjLa9JnhuEzbwNmQ==}
dependencies:
- '@vue/server-renderer': 3.4.27(vue@3.4.33)
+ '@vue/server-renderer': 3.4.27(vue@3.4.34)
import-string: 0.1.2(typescript@5.4.5)
scule: 1.3.0
unbuild: 2.0.0(typescript@5.4.5)
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
transitivePeerDependencies:
- sass
- supports-color
@@ -28313,7 +28444,7 @@ packages:
github-buttons: 2.27.0
dev: false
- /vue-i18n@9.9.1(vue@3.4.33):
+ /vue-i18n@9.9.1(vue@3.4.34):
resolution: {integrity: sha512-xyQ4VspLdNSPTKBFBPWa1tvtj+9HuockZwgFeD2OhxxXuC2CWeNvV4seu2o9+vbQOyQbhAM5Ez56oxUrrnTWdw==}
engines: {node: '>= 16'}
peerDependencies:
@@ -28322,14 +28453,14 @@ packages:
'@intlify/core-base': 9.9.1
'@intlify/shared': 9.9.1
'@vue/devtools-api': 6.5.0
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
- /vue-observe-visibility@2.0.0-alpha.1(vue@3.4.33):
+ /vue-observe-visibility@2.0.0-alpha.1(vue@3.4.34):
resolution: {integrity: sha512-flFbp/gs9pZniXR6fans8smv1kDScJ8RS7rEpMjhVabiKeq7Qz3D9+eGsypncjfIyyU84saU88XZ0zjbD6Gq/g==}
peerDependencies:
vue: latest
dependencies:
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
dev: true
/vue-qrcode-reader@3.1.9:
@@ -28338,51 +28469,51 @@ packages:
barcode-detector: 1.0.4
callforth: 0.3.1
core-js: 3.32.1
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
webrtc-adapter: 7.7.0
transitivePeerDependencies:
- typescript
dev: false
- /vue-resize@2.0.0-alpha.1(vue@3.4.33):
+ /vue-resize@2.0.0-alpha.1(vue@3.4.34):
resolution: {integrity: sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==}
peerDependencies:
vue: latest
dependencies:
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
dev: true
- /vue-router@4.3.0(vue@3.4.33):
+ /vue-router@4.3.0(vue@3.4.34):
resolution: {integrity: sha512-dqUcs8tUeG+ssgWhcPbjHvazML16Oga5w34uCUmsk7i0BcnskoLGwjpa15fqMr2Fa5JgVBrdL2MEgqz6XZ/6IQ==}
peerDependencies:
vue: latest
dependencies:
'@vue/devtools-api': 6.6.1
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
dev: true
- /vue-types@3.0.2(vue@3.4.33):
+ /vue-types@3.0.2(vue@3.4.34):
resolution: {integrity: sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==}
engines: {node: '>=10.15.0'}
peerDependencies:
vue: latest
dependencies:
is-plain-object: 3.0.1
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
dev: false
- /vue-virtual-scroller@2.0.0-beta.8(vue@3.4.33):
+ /vue-virtual-scroller@2.0.0-beta.8(vue@3.4.34):
resolution: {integrity: sha512-b8/f5NQ5nIEBRTNi6GcPItE4s7kxNHw2AIHLtDp+2QvqdTjVN0FgONwX9cr53jWRgnu+HRLPaWDOR2JPI5MTfQ==}
peerDependencies:
vue: latest
dependencies:
mitt: 2.1.0
- vue: 3.4.33(typescript@5.4.5)
- vue-observe-visibility: 2.0.0-alpha.1(vue@3.4.33)
- vue-resize: 2.0.0-alpha.1(vue@3.4.33)
+ vue: 3.4.34(typescript@5.4.5)
+ vue-observe-visibility: 2.0.0-alpha.1(vue@3.4.34)
+ vue-resize: 2.0.0-alpha.1(vue@3.4.34)
dev: true
- /vue3-calendar-heatmap@2.0.5(tippy.js@6.3.7)(vue@3.4.33):
+ /vue3-calendar-heatmap@2.0.5(tippy.js@6.3.7)(vue@3.4.34):
resolution: {integrity: sha512-qvveNQlTS5Aw7AvRLs0zOyu3uP5iGJlXJAnkrkG2ElDdyQ8H1TJhQ8rL702CROjAg16ezIveUY10nCO7lqZ25w==}
engines: {node: '>=16'}
peerDependencies:
@@ -28390,7 +28521,7 @@ packages:
vue: latest
dependencies:
tippy.js: 6.3.7
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
dev: false
/vue3-contextmenu@0.2.12:
@@ -28398,7 +28529,7 @@ packages:
dependencies:
core-js: 3.32.1
mitt: 2.1.0
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
transitivePeerDependencies:
- typescript
dev: false
@@ -28419,38 +28550,38 @@ packages:
mitt: 3.0.1
dev: false
- /vue3-text-clamp@0.1.2(resize-detector@0.3.0)(vue@3.4.33):
+ /vue3-text-clamp@0.1.2(resize-detector@0.3.0)(vue@3.4.34):
resolution: {integrity: sha512-896tGhkwaDObKL4gUv9KhR6GQQYzIzut77P2jmfUoTaJ5lJP6kLMfCUEKwGQWbDgXXkqDcoE/QV/UtP4Jn7r3Q==}
peerDependencies:
resize-detector: ^0.3.0
vue: latest
dependencies:
resize-detector: 0.3.0
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
dev: false
- /vue@3.4.33(typescript@5.4.5):
- resolution: {integrity: sha512-VdMCWQOummbhctl4QFMcW6eNtXHsFyDlX60O/tsSQuCcuDOnJ1qPOhhVla65Niece7xq/P2zyZReIO5mP+LGTQ==}
+ /vue@3.4.34(typescript@5.4.5):
+ resolution: {integrity: sha512-VZze05HWlA3ItreQ/ka7Sx7PoD0/3St8FEiSlSTVgb6l4hL+RjtP2/8g5WQBzZgyf8WG2f+g1bXzC7zggLhAJA==}
peerDependencies:
typescript: latest
peerDependenciesMeta:
typescript:
optional: true
dependencies:
- '@vue/compiler-dom': 3.4.33
- '@vue/compiler-sfc': 3.4.33
- '@vue/runtime-dom': 3.4.33
- '@vue/server-renderer': 3.4.33(vue@3.4.33)
- '@vue/shared': 3.4.33
+ '@vue/compiler-dom': 3.4.34
+ '@vue/compiler-sfc': 3.4.34
+ '@vue/runtime-dom': 3.4.34
+ '@vue/server-renderer': 3.4.34(vue@3.4.34)
+ '@vue/shared': 3.4.34
typescript: 5.4.5
- /vuedraggable@4.1.0(vue@3.4.33):
+ /vuedraggable@4.1.0(vue@3.4.34):
resolution: {integrity: sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==}
peerDependencies:
vue: latest
dependencies:
sortablejs: 1.14.0
- vue: 3.4.33(typescript@5.4.5)
+ vue: 3.4.34(typescript@5.4.5)
dev: false
/w3c-keyname@2.2.8:
diff --git a/tests/playwright/pages/Dashboard/common/Cell/AttachmentCell.ts b/tests/playwright/pages/Dashboard/common/Cell/AttachmentCell.ts
index 255e589dd0..e41e5ad52e 100644
--- a/tests/playwright/pages/Dashboard/common/Cell/AttachmentCell.ts
+++ b/tests/playwright/pages/Dashboard/common/Cell/AttachmentCell.ts
@@ -21,9 +21,22 @@ export class AttachmentCellPageObject extends BasePage {
// filePath: to attach multiple files, pass an array of file paths
// e.g. ['path/to/file1', 'path/to/file2']
//
- async addFile({ index, columnHeader, filePath }: { index?: number; columnHeader: string; filePath: string[] }) {
+ async addFile({
+ index,
+ columnHeader,
+ filePath,
+ skipElemClick,
+ }: {
+ index?: number;
+ columnHeader: string;
+ filePath: string[];
+ skipElemClick?: boolean;
+ }) {
await this.get({ index, columnHeader }).scrollIntoViewIfNeeded();
- await this.get({ index, columnHeader }).click({ position: { x: 1, y: 1 } });
+
+ if (!skipElemClick) {
+ await this.get({ index, columnHeader }).click({ position: { x: 1, y: 1 } });
+ }
await this.get({ index, columnHeader }).locator('[data-testid="attachment-cell-file-picker-button"]').click();
@@ -39,9 +52,22 @@ export class AttachmentCellPageObject extends BasePage {
await this.rootPage.waitForTimeout(750);
}
- async removeFile({ attIndex, index, columnHeader }: { attIndex: number; index?: number; columnHeader: string }) {
+ async removeFile({
+ attIndex,
+ index,
+ columnHeader,
+ skipElemClick,
+ }: {
+ attIndex: number;
+ index?: number;
+ columnHeader: string;
+ skipElemClick?: boolean;
+ }) {
await this.get({ index, columnHeader }).scrollIntoViewIfNeeded();
- await this.get({ index, columnHeader }).click({ position: { x: 1, y: 1 } });
+
+ if (!skipElemClick) {
+ await this.get({ index, columnHeader }).click({ position: { x: 1, y: 1 } });
+ }
await this.get({ index, columnHeader }).locator('.nc-attachment-item').nth(attIndex).hover();
await this.get({ index, columnHeader })
diff --git a/tests/playwright/tests/db/columns/columnAttachments.spec.ts b/tests/playwright/tests/db/columns/columnAttachments.spec.ts
index c7c95bbbbe..a375c729d4 100644
--- a/tests/playwright/tests/db/columns/columnAttachments.spec.ts
+++ b/tests/playwright/tests/db/columns/columnAttachments.spec.ts
@@ -78,6 +78,7 @@ test.describe('Attachment column', () => {
await sharedForm.cell.attachment.addFile({
columnHeader: 'testAttach',
filePath: [`${process.cwd()}/fixtures/sampleFiles/1.json`],
+ skipElemClick: true,
});
await sharedForm.rootPage.waitForTimeout(1000);
diff --git a/tests/playwright/tests/db/views/viewForm.spec.ts b/tests/playwright/tests/db/views/viewForm.spec.ts
index 745602d896..1719da3ae9 100644
--- a/tests/playwright/tests/db/views/viewForm.spec.ts
+++ b/tests/playwright/tests/db/views/viewForm.spec.ts
@@ -226,6 +226,7 @@ test.describe('Form view', () => {
await sharedForm.cell.attachment.addFile({
columnHeader: 'Attachment',
filePath: [`${process.cwd()}/fixtures/sampleFiles/sampleImage.jpeg`],
+ skipElemClick: true,
});
await sharedForm.cell.fillText({
columnHeader: 'Title',
@@ -1355,6 +1356,7 @@ test.describe('Form view: field validation', () => {
await sharedForm.cell.attachment.addFile({
columnHeader: 'Attachment',
filePath: [`${process.cwd()}/fixtures/sampleFiles/sampleImage.jpeg`],
+ skipElemClick: true,
});
const attError = await sharedForm.getFormFieldErrors({ title: 'Attachment' });
@@ -1364,11 +1366,13 @@ test.describe('Form view: field validation', () => {
await sharedForm.cell.attachment.removeFile({
columnHeader: 'Attachment',
attIndex: 0,
+ skipElemClick: true,
});
await sharedForm.cell.attachment.addFile({
columnHeader: 'Attachment',
filePath: [`${process.cwd()}/fixtures/sampleFiles/Image/2.png`],
+ skipElemClick: true,
});
await attError.verify({ hasError: false });
@@ -1401,6 +1405,7 @@ test.describe('Form view: field validation', () => {
await surveyForm.cell.attachment.addFile({
columnHeader: 'Attachment',
filePath: [`${process.cwd()}/fixtures/sampleFiles/sampleImage.jpeg`],
+ skipElemClick: true,
});
const surveryAttError = await surveyForm.getFormFieldErrors();
@@ -1410,11 +1415,13 @@ test.describe('Form view: field validation', () => {
await surveyForm.cell.attachment.removeFile({
columnHeader: 'Attachment',
attIndex: 0,
+ skipElemClick: true,
});
await surveyForm.cell.attachment.addFile({
columnHeader: 'Attachment',
filePath: [`${process.cwd()}/fixtures/sampleFiles/Image/2.png`],
+ skipElemClick: true,
});
await surveryAttError.verify({ hasError: false });