Răsfoiți Sursa

Merge remote-tracking branch 'origin/master' into support/upgrade-vite-and-vitest

Yuki Takei 1 an în urmă
părinte
comite
5eed8e6b5d
46 a modificat fișierele cu 83 adăugiri și 68 ștergeri
  1. 1 1
      apps/app/package.json
  2. 1 1
      apps/app/src/components/Admin/AuditLog/ActivityTable.tsx
  3. 1 1
      apps/app/src/components/Admin/AuditLogManagement.tsx
  4. 1 1
      apps/app/src/components/Admin/ExportArchiveData/ArchiveFilesTable.tsx
  5. 3 4
      apps/app/src/components/Admin/UserGroup/UserGroupForm.tsx
  6. 1 1
      apps/app/src/components/Admin/UserGroup/UserGroupTable.tsx
  7. 1 1
      apps/app/src/components/Admin/UserGroupDetail/UserGroupUserTable.tsx
  8. 1 1
      apps/app/src/components/Admin/Users/ExternalAccountTable.tsx
  9. 1 1
      apps/app/src/components/Admin/Users/UserTable.tsx
  10. 1 1
      apps/app/src/components/AuthorInfo/AuthorInfo.tsx
  11. 1 1
      apps/app/src/components/Me/ExternalAccountRow.jsx
  12. 1 1
      apps/app/src/components/PageAccessoriesModal/ShareLink/ShareLink.tsx
  13. 1 1
      apps/app/src/components/PageAccessoriesModal/ShareLink/ShareLinkForm.tsx
  14. 1 1
      apps/app/src/components/PageAccessoriesModal/ShareLink/ShareLinkList.tsx
  15. 1 1
      apps/app/src/components/PageAlert/TrashPageAlert.tsx
  16. 7 0
      apps/app/src/components/PageComment/CommentEditor.module.scss
  17. 1 2
      apps/app/src/components/PageComment/DeleteCommentModal.tsx
  18. 4 4
      apps/app/src/components/PageCreateModal.tsx
  19. 1 1
      apps/app/src/components/PageEditor/ConflictDiffModal.tsx
  20. 1 1
      apps/app/src/components/PageList/PageListItemL.tsx
  21. 1 1
      apps/app/src/components/Sidebar/PageCreateButton/hooks/use-create-todays-memo.tsx
  22. 1 1
      apps/app/src/components/TemplateModal/use-formatter.tsx
  23. 1 1
      apps/app/src/components/User/UserDate.jsx
  24. 1 1
      apps/app/src/server/models/attachment.ts
  25. 1 1
      apps/app/src/server/models/obsolete-page.js
  26. 1 1
      apps/app/src/server/models/page-operation.ts
  27. 3 2
      apps/app/src/server/models/password-reset-order.ts
  28. 3 2
      apps/app/src/server/models/user-registration-order.ts
  29. 1 1
      apps/app/src/server/service/config-loader.ts
  30. 3 2
      apps/app/src/server/service/config-manager.ts
  31. 7 6
      apps/app/src/server/service/in-app-notification.ts
  32. 1 1
      apps/app/src/server/service/installer.ts
  33. 0 4
      apps/app/src/styles/_layout.scss
  34. 1 1
      apps/app/test/integration/service/v5.page.test.ts
  35. 1 1
      apps/slackbot-proxy/package.json
  36. 1 1
      apps/slackbot-proxy/src/controllers/growi-to-slack.ts
  37. 1 1
      apps/slackbot-proxy/src/entities/relation.ts
  38. 1 1
      apps/slackbot-proxy/src/services/RelationsService.ts
  39. 11 6
      packages/editor/src/components/CodeMirrorEditor/CodeMirrorEditor.tsx
  40. 1 1
      packages/editor/src/components/CodeMirrorEditor/Toolbar/Toolbar.tsx
  41. 1 2
      packages/editor/src/components/CodeMirrorEditorComment.tsx
  42. 1 1
      packages/slack/package.json
  43. 1 1
      packages/slack/src/utils/generate-last-update-markdown.ts
  44. 1 0
      packages/ui/package.json
  45. 1 1
      packages/ui/src/components/Attachment.tsx
  46. 6 1
      yarn.lock

+ 1 - 1
apps/app/package.json

@@ -103,7 +103,7 @@
     "cookie-parser": "^1.4.5",
     "csurf": "^1.11.0",
     "csv-to-markdown-table": "^1.4.1",
-    "date-fns": "^2.23.0",
+    "date-fns": "^3.6.0",
     "dayjs": "^1.11.7",
     "detect-indent": "^7.0.0",
     "diff": "^5.0.0",

+ 1 - 1
apps/app/src/components/Admin/AuditLog/ActivityTable.tsx

@@ -4,7 +4,7 @@ import React, { useState, useCallback } from 'react';
 import { isPopulated } from '@growi/core';
 import { pagePathUtils } from '@growi/core/dist/utils';
 import { UserPicture } from '@growi/ui/dist/components';
-import { format } from 'date-fns';
+import { format } from 'date-fns/format';
 import { CopyToClipboard } from 'react-copy-to-clipboard';
 import { useTranslation } from 'react-i18next';
 import { Tooltip } from 'reactstrap';

+ 1 - 1
apps/app/src/components/Admin/AuditLogManagement.tsx

@@ -2,7 +2,7 @@ import type { FC } from 'react';
 import React, { useState, useCallback, useRef } from 'react';
 
 import { LoadingSpinner } from '@growi/ui/dist/components';
-import { format } from 'date-fns';
+import { format } from 'date-fns/format';
 import { useTranslation } from 'react-i18next';
 
 import type { IClearable } from '~/client/interfaces/clearable';

+ 1 - 1
apps/app/src/components/Admin/ExportArchiveData/ArchiveFilesTable.tsx

@@ -1,6 +1,6 @@
 import React from 'react';
 
-import { format } from 'date-fns';
+import { format } from 'date-fns/format';
 import { useTranslation } from 'next-i18next';
 
 import ArchiveFilesTableMenu from './ArchiveFilesTableMenu';

+ 3 - 4
apps/app/src/components/Admin/UserGroup/UserGroupForm.tsx

@@ -1,9 +1,8 @@
-import React, {
-  FC, useCallback, useEffect, useState,
-} from 'react';
+import type { FC } from 'react';
+import React, { useCallback, useEffect, useState } from 'react';
 
 import type { IUserGroupHasId } from '@growi/core';
-import dateFnsFormat from 'date-fns/format';
+import { format as dateFnsFormat } from 'date-fns/format';
 import { useTranslation } from 'next-i18next';
 
 type Props = {

+ 1 - 1
apps/app/src/components/Admin/UserGroup/UserGroupTable.tsx

@@ -2,7 +2,7 @@ import type { FC } from 'react';
 import React, { useState, useEffect } from 'react';
 
 import type { IUserGroupHasId, IUserGroupRelation, IUserHasId } from '@growi/core';
-import dateFnsFormat from 'date-fns/format';
+import { format as dateFnsFormat } from 'date-fns/format';
 import { useTranslation } from 'next-i18next';
 import Link from 'next/link';
 

+ 1 - 1
apps/app/src/components/Admin/UserGroupDetail/UserGroupUserTable.tsx

@@ -1,7 +1,7 @@
 import React from 'react';
 
 import { UserPicture } from '@growi/ui/dist/components';
-import dateFnsFormat from 'date-fns/format';
+import { format as dateFnsFormat } from 'date-fns/format';
 import { useTranslation } from 'next-i18next';
 
 import type { IUserGroupRelationHasIdPopulatedUser } from '~/interfaces/user-group-response';

+ 1 - 1
apps/app/src/components/Admin/Users/ExternalAccountTable.tsx

@@ -1,7 +1,7 @@
 import React, { useCallback } from 'react';
 
 import type { IAdminExternalAccount } from '@growi/core';
-import dateFnsFormat from 'date-fns/format';
+import { format as dateFnsFormat } from 'date-fns/format';
 import { useTranslation } from 'next-i18next';
 
 import AdminExternalAccountsContainer from '~/client/services/AdminExternalAccountsContainer';

+ 1 - 1
apps/app/src/components/Admin/Users/UserTable.tsx

@@ -2,7 +2,7 @@ import React, { useCallback } from 'react';
 
 import type { IUserHasId } from '@growi/core';
 import { UserPicture } from '@growi/ui/dist/components';
-import dateFnsFormat from 'date-fns/format';
+import { format as dateFnsFormat } from 'date-fns/format';
 import { useTranslation } from 'next-i18next';
 
 import AdminUsersContainer from '~/client/services/AdminUsersContainer';

+ 1 - 1
apps/app/src/components/AuthorInfo/AuthorInfo.tsx

@@ -3,7 +3,7 @@ import React from 'react';
 import type { IUser } from '@growi/core';
 import { pagePathUtils } from '@growi/core/dist/utils';
 import { UserPicture } from '@growi/ui/dist/components';
-import { format } from 'date-fns';
+import { format } from 'date-fns/format';
 import { useTranslation } from 'next-i18next';
 import Link from 'next/link';
 

+ 1 - 1
apps/app/src/components/Me/ExternalAccountRow.jsx

@@ -1,7 +1,7 @@
 
 import React from 'react';
 
-import dateFnsFormat from 'date-fns/format';
+import { format as dateFnsFormat } from 'date-fns/format';
 import { useTranslation } from 'next-i18next';
 import PropTypes from 'prop-types';
 

+ 1 - 1
apps/app/src/components/PageAccessoriesModal/ShareLink/ShareLink.tsx

@@ -51,7 +51,7 @@ export const ShareLink = (): JSX.Element => {
 
   return (
     <div className="container p-0" data-testid="share-link-management">
-      <h3 className="grw-modal-head d-flex pb-2">
+      <h3 className="d-flex pb-2">
         { t('share_links.share_link_list') }
         <button className="btn btn-danger ms-auto " type="button" onClick={deleteAllLinksButtonHandler}>{t('delete_all')}</button>
       </h3>

+ 1 - 1
apps/app/src/components/PageAccessoriesModal/ShareLink/ShareLinkForm.tsx

@@ -102,7 +102,7 @@ export const ShareLinkForm: FC<Props> = (props: Props) => {
 
   return (
     <div className="share-link-form p-3">
-      <h3 className="grw-modal-head pb-2"> { t('share_links.share_settings') }</h3>
+      <h3 className="pb-2"> { t('share_links.share_settings') }</h3>
       <div className=" p-3">
 
         {/* ExpirationTypeOptions */}

+ 1 - 1
apps/app/src/components/PageAccessoriesModal/ShareLink/ShareLinkList.tsx

@@ -1,6 +1,6 @@
 import React from 'react';
 
-import dateFnsFormat from 'date-fns/format';
+import { format as dateFnsFormat } from 'date-fns/format';
 import { useTranslation } from 'next-i18next';
 
 import { CopyDropdown } from '../../Common/CopyDropdown';

+ 1 - 1
apps/app/src/components/PageAlert/TrashPageAlert.tsx

@@ -1,7 +1,7 @@
 import React, { useCallback } from 'react';
 
 import { UserPicture } from '@growi/ui/dist/components';
-import { format } from 'date-fns';
+import { format } from 'date-fns/format';
 import { useRouter } from 'next/router';
 import { useTranslation } from 'react-i18next';
 

+ 7 - 0
apps/app/src/components/PageComment/CommentEditor.module.scss

@@ -36,3 +36,10 @@
     padding-top: 0.5em;
   }
 }
+
+// border-radius
+.comment-editor-styles :global {
+  .cm-editor, .cm-scroller {
+    border-radius: var(--bs-border-radius);
+  }
+}

+ 1 - 2
apps/app/src/components/PageComment/DeleteCommentModal.tsx

@@ -2,8 +2,7 @@ import React from 'react';
 
 import { isPopulated } from '@growi/core';
 import { UserPicture } from '@growi/ui/dist/components';
-import { format } from 'date-fns';
-import { t } from 'i18next';
+import { format } from 'date-fns/format';
 import { useTranslation } from 'next-i18next';
 import {
   Button, Modal, ModalHeader, ModalBody, ModalFooter,

+ 4 - 4
apps/app/src/components/PageCreateModal.tsx

@@ -4,7 +4,7 @@ import React, {
 
 import { Origin } from '@growi/core';
 import { pagePathUtils, pathUtils } from '@growi/core/dist/utils';
-import { format } from 'date-fns';
+import { format } from 'date-fns/format';
 import { useTranslation } from 'next-i18next';
 import {
   Modal, ModalHeader, ModalBody, UncontrolledButtonDropdown, DropdownToggle, DropdownMenu, DropdownItem,
@@ -136,7 +136,7 @@ const PageCreateModal: React.FC = () => {
     return (
       <div className="row">
         <fieldset className="col-12 mb-4">
-          <h3 className="grw-modal-head pb-2">{t('create_page_dropdown.todays.desc', { ns: 'commons' })}</h3>
+          <h3 className="pb-2">{t('create_page_dropdown.todays.desc', { ns: 'commons' })}</h3>
 
           <div className="d-sm-flex align-items-center justify-items-between">
 
@@ -181,7 +181,7 @@ const PageCreateModal: React.FC = () => {
     return (
       <div className="row" data-testid="row-create-page-under-below">
         <fieldset className="col-12 mb-4">
-          <h3 className="grw-modal-head pb-2">{t('Create under')}</h3>
+          <h3 className="pb-2">{t('Create under')}</h3>
 
           <div className="d-sm-flex align-items-center justify-items-between">
             <div className="flex-fill">
@@ -239,7 +239,7 @@ const PageCreateModal: React.FC = () => {
       <div className="row">
         <fieldset className="col-12">
 
-          <h3 className="grw-modal-head pb-2">
+          <h3 className="pb-2">
             {t('template.modal_label.Create template under')}<br />
             <code className="h6" data-testid="grw-page-create-modal-path-name">{pathname}</code>
           </h3>

+ 1 - 1
apps/app/src/components/PageEditor/ConflictDiffModal.tsx

@@ -7,7 +7,7 @@ import {
   MergeViewer, CodeMirrorEditorDiff, GlobalCodeMirrorEditorKey, useCodeMirrorEditorIsolated,
 } from '@growi/editor';
 import { UserPicture } from '@growi/ui/dist/components';
-import { format } from 'date-fns';
+import { format } from 'date-fns/format';
 import { useTranslation } from 'next-i18next';
 import {
   Modal, ModalHeader, ModalBody, ModalFooter,

+ 1 - 1
apps/app/src/components/PageList/PageListItemL.tsx

@@ -10,7 +10,7 @@ import { isIPageInfoForListing, isIPageInfoForEntity } from '@growi/core';
 import { DevidedPagePath } from '@growi/core/dist/models';
 import { pathUtils } from '@growi/core/dist/utils';
 import { UserPicture, PageListMeta } from '@growi/ui/dist/components';
-import { format } from 'date-fns';
+import { format } from 'date-fns/format';
 import { useTranslation } from 'next-i18next';
 import Link from 'next/link';
 import Clamp from 'react-multiline-clamp';

+ 1 - 1
apps/app/src/components/Sidebar/PageCreateButton/hooks/use-create-todays-memo.tsx

@@ -2,7 +2,7 @@ import { useCallback } from 'react';
 
 import { Origin } from '@growi/core';
 import { userHomepagePath } from '@growi/core/dist/utils/page-path-utils';
-import { format } from 'date-fns';
+import { format } from 'date-fns/format';
 import { useTranslation } from 'react-i18next';
 
 import { useCreatePageAndTransit } from '~/client/services/create-page';

+ 1 - 1
apps/app/src/components/TemplateModal/use-formatter.tsx

@@ -1,6 +1,6 @@
 import path from 'path';
 
-import dateFnsFormat from 'date-fns/format';
+import { format as dateFnsFormat } from 'date-fns/format';
 import mustache from 'mustache';
 
 import { useCurrentPagePath } from '~/stores/page';

+ 1 - 1
apps/app/src/components/User/UserDate.jsx

@@ -1,6 +1,6 @@
 import React from 'react';
 
-import { format } from 'date-fns';
+import { format } from 'date-fns/format';
 import PropTypes from 'prop-types';
 
 

+ 1 - 1
apps/app/src/server/models/attachment.ts

@@ -1,7 +1,7 @@
 import path from 'path';
 
 import type { IAttachment } from '@growi/core';
-import { addSeconds } from 'date-fns';
+import { addSeconds } from 'date-fns/addSeconds';
 import {
   Schema, type Model, type Document, Types,
 } from 'mongoose';

+ 1 - 1
apps/app/src/server/models/obsolete-page.js

@@ -1,5 +1,6 @@
 import { GroupType, Origin } from '@growi/core';
 import { templateChecker, pagePathUtils, pathUtils } from '@growi/core/dist/utils';
+import { differenceInYears } from 'date-fns/differenceInYears';
 import escapeStringRegexp from 'escape-string-regexp';
 
 import { Comment } from '~/features/comment/server/models/comment';
@@ -18,7 +19,6 @@ import UserGroupRelation from './user-group-relation';
 
 const nodePath = require('path');
 
-const differenceInYears = require('date-fns/differenceInYears');
 const debug = require('debug')('growi:models:page');
 const mongoose = require('mongoose');
 const urljoin = require('url-join');

+ 1 - 1
apps/app/src/server/models/page-operation.ts

@@ -1,6 +1,6 @@
 import type { IGrantedGroup } from '@growi/core';
 import { GroupType } from '@growi/core';
-import { addSeconds } from 'date-fns';
+import { addSeconds } from 'date-fns/addSeconds';
 import type {
   Model, Document, QueryOptions, FilterQuery,
 } from 'mongoose';

+ 3 - 2
apps/app/src/server/models/password-reset-order.ts

@@ -1,8 +1,9 @@
 import crypto from 'crypto';
 
-import { addMinutes } from 'date-fns';
+import { addMinutes } from 'date-fns/addMinutes';
+import type { Model, Document } from 'mongoose';
 import mongoose, {
-  Schema, Model, Document,
+  Schema,
 } from 'mongoose';
 import uniqueValidator from 'mongoose-unique-validator';
 

+ 3 - 2
apps/app/src/server/models/user-registration-order.ts

@@ -1,8 +1,9 @@
 import crypto from 'crypto';
 
-import { addHours } from 'date-fns';
+import { addHours } from 'date-fns/addHours';
+import type { Model, Document } from 'mongoose';
 import {
-  Schema, Model, Document,
+  Schema,
 } from 'mongoose';
 import uniqueValidator from 'mongoose-unique-validator';
 

+ 1 - 1
apps/app/src/server/service/config-loader.ts

@@ -1,5 +1,5 @@
 import { envUtils } from '@growi/core/dist/utils';
-import { parseISO } from 'date-fns';
+import { parseISO } from 'date-fns/parseISO';
 
 import { GrowiServiceType } from '~/features/questionnaire/interfaces/growi-info';
 import loggerFactory from '~/utils/logger';

+ 3 - 2
apps/app/src/server/service/config-manager.ts

@@ -1,11 +1,12 @@
-import parseISO from 'date-fns/parseISO';
+import { parseISO } from 'date-fns/parseISO';
 
 import loggerFactory from '~/utils/logger';
 
 import ConfigModel from '../models/config';
 import S2sMessage from '../models/vo/s2s-message';
 
-import ConfigLoader, { ConfigObject } from './config-loader';
+import type { ConfigObject } from './config-loader';
+import ConfigLoader from './config-loader';
 import type { S2sMessagingService } from './s2s-messaging/base';
 import type { S2sMessageHandlable } from './s2s-messaging/handlable';
 

+ 7 - 6
apps/app/src/server/service/in-app-notification.ts

@@ -2,21 +2,22 @@ import type {
   HasObjectId, IUser, IPage,
 } from '@growi/core';
 import { SubscriptionStatusType } from '@growi/core';
-import { subDays } from 'date-fns';
-import { Types, FilterQuery, UpdateQuery } from 'mongoose';
+import { subDays } from 'date-fns/subDays';
+import type { Types, FilterQuery, UpdateQuery } from 'mongoose';
 
 import { AllEssentialActions } from '~/interfaces/activity';
-import { InAppNotificationStatuses, PaginateResult } from '~/interfaces/in-app-notification';
-import { ActivityDocument } from '~/server/models/activity';
+import type { PaginateResult } from '~/interfaces/in-app-notification';
+import { InAppNotificationStatuses } from '~/interfaces/in-app-notification';
+import type { ActivityDocument } from '~/server/models/activity';
+import type { InAppNotificationDocument } from '~/server/models/in-app-notification';
 import {
   InAppNotification,
-  InAppNotificationDocument,
 } from '~/server/models/in-app-notification';
 import InAppNotificationSettings from '~/server/models/in-app-notification-settings';
 import Subscription from '~/server/models/subscription';
 import loggerFactory from '~/utils/logger';
 
-import Crowi from '../crowi';
+import type Crowi from '../crowi';
 import { RoomPrefix, getRoomNameWithId } from '../util/socket-io-helpers';
 
 import { generateSnapshot } from './in-app-notification/in-app-notification-utils';

+ 1 - 1
apps/app/src/server/service/installer.ts

@@ -3,7 +3,7 @@ import path from 'path';
 import type {
   Lang, IPage, IUser,
 } from '@growi/core';
-import { addSeconds } from 'date-fns';
+import { addSeconds } from 'date-fns/addSeconds';
 import ExtensibleCustomError from 'extensible-custom-error';
 import fs from 'graceful-fs';
 import mongoose from 'mongoose';

+ 0 - 4
apps/app/src/styles/_layout.scss

@@ -17,10 +17,6 @@
   }
 }
 
-.grw-modal-head {
-  border-bottom: 1px solid transparent;
-}
-
 .grw-scrollable-modal-body {
   max-height: calc(100vh - 330px);
   overflow-y: scroll;

+ 1 - 1
apps/app/test/integration/service/v5.page.test.ts

@@ -1,4 +1,4 @@
-import { addSeconds } from 'date-fns';
+import { addSeconds } from 'date-fns/addSeconds';
 import mongoose from 'mongoose';
 
 import { PageActionStage, PageActionType } from '../../../src/interfaces/page-operation';

+ 1 - 1
apps/slackbot-proxy/package.json

@@ -41,7 +41,7 @@
     "bunyan": "^1.8.15",
     "compression": "^1.7.4",
     "cookie-parser": "^1.4.5",
-    "date-fns": "^2.23.0",
+    "date-fns": "^3.6.0",
     "express-bunyan-logger": "^1.3.3",
     "extensible-custom-error": "^0.0.7",
     "helmet": "^4.6.0",

+ 1 - 1
apps/slackbot-proxy/src/controllers/growi-to-slack.ts

@@ -7,7 +7,7 @@ import {
   Controller, Get, Post, Inject, Req, Res, UseBefore, PathParams, Put, QueryParams,
 } from '@tsed/common';
 import axios from 'axios';
-import { addHours } from 'date-fns';
+import { addHours } from 'date-fns/addHours';
 import createError from 'http-errors';
 
 

+ 1 - 1
apps/slackbot-proxy/src/entities/relation.ts

@@ -1,4 +1,4 @@
-import { differenceInMilliseconds } from 'date-fns';
+import { differenceInMilliseconds } from 'date-fns/differenceInMilliseconds';
 import {
   Column, CreateDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn, ManyToOne, Index,
 } from 'typeorm';

+ 1 - 1
apps/slackbot-proxy/src/services/RelationsService.ts

@@ -3,7 +3,7 @@ import { getSupportedGrowiActionsRegExp } from '@growi/slack/dist/utils/get-supp
 import { permissionParser } from '@growi/slack/dist/utils/permission-parser';
 import { Inject, Service } from '@tsed/di';
 import axios from 'axios';
-import { addHours } from 'date-fns';
+import { addHours } from 'date-fns/addHours';
 
 import { Relation, PermissionSettingsInterface } from '~/entities/relation';
 import { RelationRepository } from '~/repositories/relation';

+ 11 - 6
packages/editor/src/components/CodeMirrorEditor/CodeMirrorEditor.tsx

@@ -1,5 +1,6 @@
 import {
   forwardRef, useMemo, useRef, useEffect,
+  DetailedHTMLProps,
 } from 'react';
 
 import { indentUnit } from '@codemirror/language';
@@ -23,11 +24,14 @@ import { Toolbar } from './Toolbar';
 
 import style from './CodeMirrorEditor.module.scss';
 
-const CodeMirrorEditorContainer = forwardRef<HTMLDivElement>((props, ref) => {
-  return (
-    <div {...props} className={`flex-expand-vert ${style['codemirror-editor-container']}`} ref={ref} />
-  );
-});
+const CodeMirrorEditorContainer = forwardRef<HTMLDivElement, DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>>(
+  (props, ref) => {
+    const { className = '', ...rest } = props;
+    return (
+      <div className={`${className} flex-expand-vert ${style['codemirror-editor-container']}`} ref={ref} {...rest} />
+    );
+  },
+);
 
 export type CodeMirrorEditorProps = {
   acceptedUploadFileType?: AcceptedUploadFileType,
@@ -48,6 +52,7 @@ export const CodeMirrorEditor = (props: Props): JSX.Element => {
   const {
     editorKey,
     hideToolbar,
+
     acceptedUploadFileType = AcceptedUploadFileType.NONE,
     indentSize,
     editorSettings,
@@ -205,7 +210,7 @@ export const CodeMirrorEditor = (props: Props): JSX.Element => {
   }, [isUploading, isDragAccept, isDragReject, acceptedUploadFileType]);
 
   return (
-    <div className={`${style['codemirror-editor']} flex-expand-vert overflow-y-hidden rounded`}>
+    <div className={`${style['codemirror-editor']} flex-expand-vert overflow-y-hidden`}>
       <div {...getRootProps()} className={`dropzone ${fileUploadState} flex-expand-vert`}>
         <input {...getInputProps()} />
         <FileDropzoneOverlay isEnabled={isDragActive} />

+ 1 - 1
packages/editor/src/components/CodeMirrorEditor/Toolbar/Toolbar.tsx

@@ -23,7 +23,7 @@ export const Toolbar = memo((props: Props): JSX.Element => {
 
   const { editorKey, acceptedUploadFileType, onUpload } = props;
   return (
-    <div className={`d-flex gap-2 py-1 px-2 px-md-3 border-top codemirror-editor-toolbar ${styles['codemirror-editor-toolbar']}`}>
+    <div className={`d-flex gap-2 py-1 px-2 px-md-3 border-top ${styles['codemirror-editor-toolbar']}`}>
       <AttachmentsDropup editorKey={editorKey} onUpload={onUpload} acceptedUploadFileType={acceptedUploadFileType} />
       <TextFormatTools editorKey={editorKey} />
       <EmojiButton

+ 1 - 2
packages/editor/src/components/CodeMirrorEditorComment.tsx

@@ -1,7 +1,7 @@
 import { memo, useEffect } from 'react';
 
 import type { Extension } from '@codemirror/state';
-import { keymap, scrollPastEnd } from '@codemirror/view';
+import { keymap } from '@codemirror/view';
 
 import { useCodeMirrorEditorIsolated } from '../stores';
 
@@ -11,7 +11,6 @@ import type { GlobalCodeMirrorEditorKey } from 'src/consts';
 
 
 const additionalExtensions: Extension[] = [
-  scrollPastEnd(),
 ];
 
 type Props = CodeMirrorEditorProps & {

+ 1 - 1
packages/slack/package.json

@@ -57,7 +57,7 @@
     "browser-bunyan": "^1.6.3",
     "bunyan": "^1.8.15",
     "crypto": "^1.0.1",
-    "date-fns": "^2.23.0",
+    "date-fns": "^3.6.0",
     "extensible-custom-error": "^0.0.7",
     "http-errors": "^2.0.0",
     "qs": "^6.10.2",

+ 1 - 1
packages/slack/src/utils/generate-last-update-markdown.ts

@@ -1,4 +1,4 @@
-import { formatDistanceStrict } from 'date-fns';
+import { formatDistanceStrict } from 'date-fns/formatDistanceStrict';
 
 export function generateLastUpdateMrkdwn(updatedAt: string | Date | number, baseDate: Date): string {
   if (updatedAt != null) {

+ 1 - 0
packages/ui/package.json

@@ -40,6 +40,7 @@
     "@growi/core": "link:../core"
   },
   "devDependencies": {
+    "date-fns": "^3.6.0",
     "reactstrap": "^9.2.0"
   },
   "peerDependencies": {

+ 1 - 1
packages/ui/src/components/Attachment.tsx

@@ -1,5 +1,5 @@
 import type { IAttachmentHasId } from '@growi/core';
-import { format } from 'date-fns';
+import { format } from 'date-fns/format';
 
 import { UserPicture } from './UserPicture';
 

+ 6 - 1
yarn.lock

@@ -1943,7 +1943,7 @@
     browser-bunyan "^1.6.3"
     bunyan "^1.8.15"
     crypto "^1.0.1"
-    date-fns "^2.23.0"
+    date-fns "^3.6.0"
     extensible-custom-error "^0.0.7"
     http-errors "^2.0.0"
     qs "^6.10.2"
@@ -7274,6 +7274,11 @@ date-fns@^2.23.0, date-fns@^2.24.0:
   resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2"
   integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==
 
+date-fns@^3.6.0:
+  version "3.6.0"
+  resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-3.6.0.tgz#f20ca4fe94f8b754951b24240676e8618c0206bf"
+  integrity sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==
+
 date-format@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf"