@manuscripts/article-editor 4.4.1 → 4.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,21 +14,34 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
14
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ const body_editor_1 = require("@manuscripts/body-editor");
17
18
  const style_guide_1 = require("@manuscripts/style-guide");
18
19
  const track_changes_plugin_1 = require("@manuscripts/track-changes-plugin");
19
20
  const react_1 = __importDefault(require("react"));
20
21
  const styled_components_1 = __importDefault(require("styled-components"));
21
22
  const use_exec_cmd_1 = __importDefault(require("../hooks/use-exec-cmd"));
22
- const DocumentLanguageSelector_1 = __importDefault(require("./DocumentLanguageSelector"));
23
+ const useStore_1 = require("../store/useStore");
23
24
  const DocumentOptionsDropdown = () => {
24
25
  const { isOpen, toggleOpen, wrapperRef } = (0, style_guide_1.useDropdown)();
25
26
  const execCmd = (0, use_exec_cmd_1.default)();
27
+ const [storeState] = (0, useStore_1.useStore)((s) => ({
28
+ doc: s.doc,
29
+ view: s.view,
30
+ }));
31
+ const handleLanguageChange = async (languageCode) => {
32
+ if (storeState.view) {
33
+ const { state, dispatch } = storeState.view;
34
+ const tr = state.tr;
35
+ tr.setDocAttribute('primaryLanguageCode', languageCode);
36
+ dispatch(tr);
37
+ }
38
+ };
26
39
  return (react_1.default.createElement(style_guide_1.DropdownContainer, { ref: wrapperRef },
27
40
  react_1.default.createElement(ToggleDropdownButton, { "data-cy": "document-options-button", title: "Document Options", onClick: toggleOpen },
28
41
  react_1.default.createElement(style_guide_1.DotsIcon, null)),
29
42
  isOpen && (react_1.default.createElement(HistoryDropdownList, { "data-cy": "history-dropdown", direction: "right", width: 192, top: 5, onClick: toggleOpen },
30
43
  react_1.default.createElement(DropdownItem, { "data-cy": "version-history-button", onClick: () => execCmd(track_changes_plugin_1.trackCommands.setTrackingStatus(track_changes_plugin_1.TrackChangesStatus.viewSnapshots)) }, "Version history"),
31
- react_1.default.createElement(DocumentLanguageSelector_1.default, { onCloseParent: toggleOpen })))));
44
+ react_1.default.createElement(body_editor_1.LanguageDropdown, { showButton: true, buttonLabel: "Document language", currentLanguage: storeState.doc?.attrs?.primaryLanguageCode || 'en', onLanguageSelect: handleLanguageChange, onCloseParent: toggleOpen })))));
32
45
  };
33
46
  exports.default = DocumentOptionsDropdown;
34
47
  const ToggleDropdownButton = styled_components_1.default.button `
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentOptionsDropdown.js","sourceRoot":"","sources":["../../../src/components/DocumentOptionsDropdown.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;AAEH,0DAKiC;AACjC,4EAG0C;AAC1C,kDAAyB;AACzB,0EAAsC;AAEtC,yEAA8C;AAC9C,0FAAiE;AAEjE,MAAM,uBAAuB,GAAa,GAAG,EAAE;IAC7C,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,IAAA,yBAAW,GAAE,CAAA;IACxD,MAAM,OAAO,GAAG,IAAA,sBAAU,GAAE,CAAA;IAE5B,OAAO,CACL,8BAAC,+BAAiB,IAAC,GAAG,EAAE,UAAU;QAChC,8BAAC,oBAAoB,eACX,yBAAyB,EACjC,KAAK,EAAC,kBAAkB,EACxB,OAAO,EAAE,UAAU;YAEnB,8BAAC,sBAAQ,OAAG,CACS;QAEtB,MAAM,IAAI,CACT,8BAAC,mBAAmB,eACV,kBAAkB,EAC1B,SAAS,EAAC,OAAO,EACjB,KAAK,EAAE,GAAG,EACV,GAAG,EAAE,CAAC,EACN,OAAO,EAAE,UAAU;YAEnB,8BAAC,YAAY,eACH,wBAAwB,EAChC,OAAO,EAAE,GAAG,EAAE,CACZ,OAAO,CACL,oCAAa,CAAC,iBAAiB,CAC7B,yCAAkB,CAAC,aAAa,CACjC,CACF,sBAIU;YACf,8BAAC,kCAAwB,IAAC,aAAa,EAAE,UAAU,GAAI,CACnC,CACvB,CACiB,CACrB,CAAA;AACH,CAAC,CAAA;AAED,kBAAe,uBAAuB,CAAA;AAEtC,MAAM,oBAAoB,GAAG,2BAAM,CAAC,MAAM,CAAA;;;;;;;;CAQzC,CAAA;AAED,MAAM,YAAY,GAAG,2BAAM,CAAC,GAAG,CAAA;iBACd,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;;;;WAI7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;;;;kBAInC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK;;CAE/D,CAAA;AAED,MAAM,mBAAmB,GAAG,IAAA,2BAAM,EAAC,0BAAY,CAAC,CAAA;;;;CAI/C,CAAA"}
1
+ {"version":3,"file":"DocumentOptionsDropdown.js","sourceRoot":"","sources":["../../../src/components/DocumentOptionsDropdown.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;AAEH,0DAA2D;AAC3D,0DAKiC;AACjC,4EAG0C;AAC1C,kDAAyB;AACzB,0EAAsC;AAEtC,yEAA8C;AAC9C,gDAA4C;AAE5C,MAAM,uBAAuB,GAAa,GAAG,EAAE;IAC7C,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,IAAA,yBAAW,GAAE,CAAA;IACxD,MAAM,OAAO,GAAG,IAAA,sBAAU,GAAE,CAAA;IAC5B,MAAM,CAAC,UAAU,CAAC,GAAG,IAAA,mBAAQ,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpC,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,IAAI,EAAE,CAAC,CAAC,IAAI;KACb,CAAC,CAAC,CAAA;IAEH,MAAM,oBAAoB,GAAG,KAAK,EAAE,YAAoB,EAAE,EAAE;QAC1D,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,IAAI,CAAA;YAC3C,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAA;YACnB,EAAE,CAAC,eAAe,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAA;YACvD,QAAQ,CAAC,EAAE,CAAC,CAAA;QACd,CAAC;IACH,CAAC,CAAA;IAED,OAAO,CACL,8BAAC,+BAAiB,IAAC,GAAG,EAAE,UAAU;QAChC,8BAAC,oBAAoB,eACX,yBAAyB,EACjC,KAAK,EAAC,kBAAkB,EACxB,OAAO,EAAE,UAAU;YAEnB,8BAAC,sBAAQ,OAAG,CACS;QAEtB,MAAM,IAAI,CACT,8BAAC,mBAAmB,eACV,kBAAkB,EAC1B,SAAS,EAAC,OAAO,EACjB,KAAK,EAAE,GAAG,EACV,GAAG,EAAE,CAAC,EACN,OAAO,EAAE,UAAU;YAEnB,8BAAC,YAAY,eACH,wBAAwB,EAChC,OAAO,EAAE,GAAG,EAAE,CACZ,OAAO,CACL,oCAAa,CAAC,iBAAiB,CAC7B,yCAAkB,CAAC,aAAa,CACjC,CACF,sBAIU;YACf,8BAAC,8BAAgB,IACf,UAAU,EAAE,IAAI,EAChB,WAAW,EAAC,mBAAmB,EAC/B,eAAe,EAAE,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,mBAAmB,IAAI,IAAI,EACnE,gBAAgB,EAAE,oBAAoB,EACtC,aAAa,EAAE,UAAU,GACzB,CACkB,CACvB,CACiB,CACrB,CAAA;AACH,CAAC,CAAA;AAED,kBAAe,uBAAuB,CAAA;AAEtC,MAAM,oBAAoB,GAAG,2BAAM,CAAC,MAAM,CAAA;;;;;;;;CAQzC,CAAA;AAED,MAAM,YAAY,GAAG,2BAAM,CAAC,GAAG,CAAA;iBACd,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;;;;WAI7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;;;;kBAInC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK;;CAE/D,CAAA;AAED,MAAM,mBAAmB,GAAG,IAAA,2BAAM,EAAC,0BAAY,CAAC,CAAA;;;;CAI/C,CAAA"}
@@ -9,21 +9,34 @@
9
9
  *
10
10
  * All portions of the code written by Atypon Systems LLC are Copyright (c) 2025 Atypon Systems LLC. All Rights Reserved.
11
11
  */
12
+ import { LanguageDropdown } from '@manuscripts/body-editor';
12
13
  import { DotsIcon, DropdownContainer, DropdownList, useDropdown, } from '@manuscripts/style-guide';
13
14
  import { TrackChangesStatus, trackCommands, } from '@manuscripts/track-changes-plugin';
14
15
  import React from 'react';
15
16
  import styled from 'styled-components';
16
17
  import useExecCmd from '../hooks/use-exec-cmd';
17
- import DocumentLanguageSelector from './DocumentLanguageSelector';
18
+ import { useStore } from '../store/useStore';
18
19
  const DocumentOptionsDropdown = () => {
19
20
  const { isOpen, toggleOpen, wrapperRef } = useDropdown();
20
21
  const execCmd = useExecCmd();
22
+ const [storeState] = useStore((s) => ({
23
+ doc: s.doc,
24
+ view: s.view,
25
+ }));
26
+ const handleLanguageChange = async (languageCode) => {
27
+ if (storeState.view) {
28
+ const { state, dispatch } = storeState.view;
29
+ const tr = state.tr;
30
+ tr.setDocAttribute('primaryLanguageCode', languageCode);
31
+ dispatch(tr);
32
+ }
33
+ };
21
34
  return (React.createElement(DropdownContainer, { ref: wrapperRef },
22
35
  React.createElement(ToggleDropdownButton, { "data-cy": "document-options-button", title: "Document Options", onClick: toggleOpen },
23
36
  React.createElement(DotsIcon, null)),
24
37
  isOpen && (React.createElement(HistoryDropdownList, { "data-cy": "history-dropdown", direction: "right", width: 192, top: 5, onClick: toggleOpen },
25
38
  React.createElement(DropdownItem, { "data-cy": "version-history-button", onClick: () => execCmd(trackCommands.setTrackingStatus(TrackChangesStatus.viewSnapshots)) }, "Version history"),
26
- React.createElement(DocumentLanguageSelector, { onCloseParent: toggleOpen })))));
39
+ React.createElement(LanguageDropdown, { showButton: true, buttonLabel: "Document language", currentLanguage: storeState.doc?.attrs?.primaryLanguageCode || 'en', onLanguageSelect: handleLanguageChange, onCloseParent: toggleOpen })))));
27
40
  };
28
41
  export default DocumentOptionsDropdown;
29
42
  const ToggleDropdownButton = styled.button `
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentOptionsDropdown.js","sourceRoot":"","sources":["../../../src/components/DocumentOptionsDropdown.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,WAAW,GACZ,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,kBAAkB,EAClB,aAAa,GACd,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,MAAM,MAAM,mBAAmB,CAAA;AAEtC,OAAO,UAAU,MAAM,uBAAuB,CAAA;AAC9C,OAAO,wBAAwB,MAAM,4BAA4B,CAAA;AAEjE,MAAM,uBAAuB,GAAa,GAAG,EAAE;IAC7C,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAA;IACxD,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAE5B,OAAO,CACL,oBAAC,iBAAiB,IAAC,GAAG,EAAE,UAAU;QAChC,oBAAC,oBAAoB,eACX,yBAAyB,EACjC,KAAK,EAAC,kBAAkB,EACxB,OAAO,EAAE,UAAU;YAEnB,oBAAC,QAAQ,OAAG,CACS;QAEtB,MAAM,IAAI,CACT,oBAAC,mBAAmB,eACV,kBAAkB,EAC1B,SAAS,EAAC,OAAO,EACjB,KAAK,EAAE,GAAG,EACV,GAAG,EAAE,CAAC,EACN,OAAO,EAAE,UAAU;YAEnB,oBAAC,YAAY,eACH,wBAAwB,EAChC,OAAO,EAAE,GAAG,EAAE,CACZ,OAAO,CACL,aAAa,CAAC,iBAAiB,CAC7B,kBAAkB,CAAC,aAAa,CACjC,CACF,sBAIU;YACf,oBAAC,wBAAwB,IAAC,aAAa,EAAE,UAAU,GAAI,CACnC,CACvB,CACiB,CACrB,CAAA;AACH,CAAC,CAAA;AAED,eAAe,uBAAuB,CAAA;AAEtC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAA;;;;;;;;CAQzC,CAAA;AAED,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAA;iBACd,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;;;;WAI7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;;;;kBAInC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK;;CAE/D,CAAA;AAED,MAAM,mBAAmB,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;;;;CAI/C,CAAA"}
1
+ {"version":3,"file":"DocumentOptionsDropdown.js","sourceRoot":"","sources":["../../../src/components/DocumentOptionsDropdown.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,WAAW,GACZ,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,kBAAkB,EAClB,aAAa,GACd,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,MAAM,MAAM,mBAAmB,CAAA;AAEtC,OAAO,UAAU,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5C,MAAM,uBAAuB,GAAa,GAAG,EAAE;IAC7C,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAA;IACxD,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAC5B,MAAM,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpC,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,IAAI,EAAE,CAAC,CAAC,IAAI;KACb,CAAC,CAAC,CAAA;IAEH,MAAM,oBAAoB,GAAG,KAAK,EAAE,YAAoB,EAAE,EAAE;QAC1D,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,IAAI,CAAA;YAC3C,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAA;YACnB,EAAE,CAAC,eAAe,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAA;YACvD,QAAQ,CAAC,EAAE,CAAC,CAAA;QACd,CAAC;IACH,CAAC,CAAA;IAED,OAAO,CACL,oBAAC,iBAAiB,IAAC,GAAG,EAAE,UAAU;QAChC,oBAAC,oBAAoB,eACX,yBAAyB,EACjC,KAAK,EAAC,kBAAkB,EACxB,OAAO,EAAE,UAAU;YAEnB,oBAAC,QAAQ,OAAG,CACS;QAEtB,MAAM,IAAI,CACT,oBAAC,mBAAmB,eACV,kBAAkB,EAC1B,SAAS,EAAC,OAAO,EACjB,KAAK,EAAE,GAAG,EACV,GAAG,EAAE,CAAC,EACN,OAAO,EAAE,UAAU;YAEnB,oBAAC,YAAY,eACH,wBAAwB,EAChC,OAAO,EAAE,GAAG,EAAE,CACZ,OAAO,CACL,aAAa,CAAC,iBAAiB,CAC7B,kBAAkB,CAAC,aAAa,CACjC,CACF,sBAIU;YACf,oBAAC,gBAAgB,IACf,UAAU,EAAE,IAAI,EAChB,WAAW,EAAC,mBAAmB,EAC/B,eAAe,EAAE,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,mBAAmB,IAAI,IAAI,EACnE,gBAAgB,EAAE,oBAAoB,EACtC,aAAa,EAAE,UAAU,GACzB,CACkB,CACvB,CACiB,CACrB,CAAA;AACH,CAAC,CAAA;AAED,eAAe,uBAAuB,CAAA;AAEtC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAA;;;;;;;;CAQzC,CAAA;AAED,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAA;iBACd,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;;;;WAI7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;;;;kBAInC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK;;CAE/D,CAAA;AAED,MAAM,mBAAmB,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;;;;CAI/C,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@manuscripts/article-editor",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "license": "CPAL-1.0",
5
5
  "description": "React components for editing and viewing manuscripts",
6
6
  "repository": "github:Atypon-OpenSource/manuscripts-article-editor",
@@ -28,14 +28,13 @@
28
28
  "unlink-all": "rm pnpm-workspace.yaml && pnpm install"
29
29
  },
30
30
  "dependencies": {
31
- "@cospired/i18n-iso-languages": "^4.2.0",
32
31
  "@fontsource/lato": "5.2.5",
33
32
  "@fontsource/pt-sans": "5.2.5",
34
33
  "@fontsource/pt-serif": "5.2.5",
35
34
  "@headlessui/react": "2.2.3",
36
- "@manuscripts/body-editor": "3.4.1",
35
+ "@manuscripts/body-editor": "3.4.4",
37
36
  "@manuscripts/json-schema": "2.2.12",
38
- "@manuscripts/style-guide": "3.2.1",
37
+ "@manuscripts/style-guide": "3.2.3",
39
38
  "@manuscripts/track-changes-plugin": "2.0.10",
40
39
  "@manuscripts/transform": "4.2.13",
41
40
  "@popperjs/core": "2.11.8",
@@ -1,257 +0,0 @@
1
- "use strict";
2
- /*!
3
- * The contents of this file are subject to the Common Public Attribution License Version 1.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://mpapp-public.gitlab.io/manuscripts-frontend/LICENSE. The License is based on the Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover use of software over a computer network and provide for limited attribution for the Original Developer. In addition, Exhibit A has been modified to be consistent with Exhibit B.
4
- *
5
- * Software distributed under the License is distributed on an “AS IS” basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.
6
- *
7
- * The Original Code is manuscripts-frontend.
8
- *
9
- * The Original Developer is the Initial Developer. The Initial Developer of the Original Code is Atypon Systems LLC.
10
- *
11
- * All portions of the code written by Atypon Systems LLC are Copyright (c) 2025 Atypon Systems LLC. All Rights Reserved.
12
- */
13
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- var desc = Object.getOwnPropertyDescriptor(m, k);
16
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
- desc = { enumerable: true, get: function() { return m[k]; } };
18
- }
19
- Object.defineProperty(o, k2, desc);
20
- }) : (function(o, m, k, k2) {
21
- if (k2 === undefined) k2 = k;
22
- o[k2] = m[k];
23
- }));
24
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
- Object.defineProperty(o, "default", { enumerable: true, value: v });
26
- }) : function(o, v) {
27
- o["default"] = v;
28
- });
29
- var __importStar = (this && this.__importStar) || (function () {
30
- var ownKeys = function(o) {
31
- ownKeys = Object.getOwnPropertyNames || function (o) {
32
- var ar = [];
33
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
34
- return ar;
35
- };
36
- return ownKeys(o);
37
- };
38
- return function (mod) {
39
- if (mod && mod.__esModule) return mod;
40
- var result = {};
41
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
42
- __setModuleDefault(result, mod);
43
- return result;
44
- };
45
- })();
46
- var __importDefault = (this && this.__importDefault) || function (mod) {
47
- return (mod && mod.__esModule) ? mod : { "default": mod };
48
- };
49
- Object.defineProperty(exports, "__esModule", { value: true });
50
- const i18n_iso_languages_1 = __importDefault(require("@cospired/i18n-iso-languages"));
51
- const style_guide_1 = require("@manuscripts/style-guide");
52
- const react_1 = __importStar(require("react"));
53
- const styled_components_1 = __importDefault(require("styled-components"));
54
- const useStore_1 = require("../store/useStore");
55
- // Native names lookup for common languages
56
- const NATIVE_NAMES = {
57
- en: 'Default',
58
- es: 'Español',
59
- fr: 'Français',
60
- de: 'Deutsch',
61
- it: 'Italiano',
62
- pt: 'Português',
63
- ru: 'Русский',
64
- ja: '日本語',
65
- ko: '한국어',
66
- zh: '中文',
67
- ar: 'العربية',
68
- };
69
- const COMMON_LANGUAGES = Object.keys(NATIVE_NAMES);
70
- // Fallback language object for English
71
- const ENGLISH_FALLBACK = {
72
- code: 'en',
73
- name: 'English',
74
- nativeName: 'English',
75
- isCommon: true,
76
- };
77
- // Get display name for selected language
78
- const getSelectedLanguageName = (selectedLanguage, allLanguages) => {
79
- if (!allLanguages.length) {
80
- return 'English (Default)';
81
- }
82
- const lang = allLanguages.find((l) => l.code === selectedLanguage) || ENGLISH_FALLBACK;
83
- return lang.code === 'en'
84
- ? 'English (Default)'
85
- : `${lang.name}${lang.nativeName ? ` (${lang.nativeName})` : ''}`;
86
- };
87
- const LanguageOptionItem = ({ language, isSelected, onSelect }) => (react_1.default.createElement(LanguageOption, { key: language.code, onClick: (event) => onSelect(event, language.code) },
88
- language.name,
89
- language.nativeName && ` (${language.nativeName})`,
90
- isSelected && (react_1.default.createElement(TickIconWrapper, null,
91
- react_1.default.createElement(style_guide_1.TickIcon, null)))));
92
- const DocumentLanguageSelector = ({ onCloseParent, }) => {
93
- const [storeState] = (0, useStore_1.useStore)((s) => ({
94
- doc: s.doc,
95
- view: s.view,
96
- }));
97
- // Get selected language from document's primaryLanguageCode or default to 'en'
98
- const selectedLanguage = storeState.doc?.attrs?.primaryLanguageCode || 'en';
99
- const [isSubmenuOpen, setIsSubmenuOpen] = (0, react_1.useState)(false);
100
- const [allLanguages, setAllLanguages] = (0, react_1.useState)([]);
101
- const submenuRef = (0, react_1.useRef)(null);
102
- // Initialize language data and load all languages
103
- (0, react_1.useEffect)(() => {
104
- const loadLanguages = async () => {
105
- try {
106
- // Dynamically import the English language data
107
- const englishLanguageData = await Promise.resolve().then(() => __importStar(require('@cospired/i18n-iso-languages/langs/en.json')));
108
- i18n_iso_languages_1.default.registerLocale(englishLanguageData.default);
109
- // Get all available language codes
110
- const languageCodes = i18n_iso_languages_1.default.getAlpha2Codes();
111
- const languagesList = Object.keys(languageCodes).map((code) => ({
112
- code,
113
- name: i18n_iso_languages_1.default.getName(code, 'en') || code,
114
- nativeName: NATIVE_NAMES[code] || i18n_iso_languages_1.default.getName(code, code) || undefined,
115
- isCommon: COMMON_LANGUAGES.includes(code),
116
- }));
117
- setAllLanguages(languagesList);
118
- }
119
- catch (error) {
120
- console.error('Failed to load language data:', error);
121
- // Fallback to English only if loading fails
122
- setAllLanguages([ENGLISH_FALLBACK]);
123
- }
124
- };
125
- loadLanguages();
126
- }, []);
127
- // Prepare language options with common languages first
128
- const languageOptions = (0, react_1.useMemo)(() => {
129
- return [...allLanguages].sort((a, b) => {
130
- // Sort common languages first
131
- if (a.isCommon && !b.isCommon) {
132
- return -1;
133
- }
134
- if (!a.isCommon && b.isCommon) {
135
- return 1;
136
- }
137
- // Then sort alphabetically by name
138
- return a.name.localeCompare(b.name);
139
- });
140
- }, [allLanguages]);
141
- // Close submenu when clicking outside
142
- (0, react_1.useEffect)(() => {
143
- const handleClickOutside = (event) => {
144
- if (submenuRef.current &&
145
- !submenuRef.current.contains(event.target)) {
146
- setIsSubmenuOpen(false);
147
- onCloseParent?.();
148
- }
149
- };
150
- if (isSubmenuOpen) {
151
- document.addEventListener('mousedown', handleClickOutside);
152
- }
153
- return () => {
154
- document.removeEventListener('mousedown', handleClickOutside);
155
- };
156
- }, [isSubmenuOpen, onCloseParent]);
157
- const handleLanguageButtonClick = (event) => {
158
- event.stopPropagation();
159
- setIsSubmenuOpen(!isSubmenuOpen);
160
- };
161
- const handleLanguageSelect = (event, languageCode) => {
162
- event.stopPropagation();
163
- if (storeState.view) {
164
- const { state, dispatch } = storeState.view;
165
- const tr = state.tr;
166
- tr.setDocAttribute('primaryLanguageCode', languageCode);
167
- dispatch(tr);
168
- }
169
- };
170
- return (react_1.default.createElement(style_guide_1.DropdownContainer, { ref: submenuRef },
171
- react_1.default.createElement(LanguageSelectorButton, { onClick: handleLanguageButtonClick },
172
- react_1.default.createElement(LanguageHeader, null,
173
- react_1.default.createElement(LanguageLabel, null,
174
- "Document language ",
175
- react_1.default.createElement(style_guide_1.TriangleCollapsedIcon, null)),
176
- react_1.default.createElement(SelectedLanguageText, null, getSelectedLanguageName(selectedLanguage, allLanguages)))),
177
- isSubmenuOpen && (react_1.default.createElement(StyledDropdownList, { direction: "right", width: 231, top: 18, height: 400 }, languageOptions.map((language) => (react_1.default.createElement(LanguageOptionItem, { key: language.code, language: language, isSelected: selectedLanguage === language.code, onSelect: handleLanguageSelect })))))));
178
- };
179
- exports.default = DocumentLanguageSelector;
180
- const StyledDropdownList = (0, styled_components_1.default)(style_guide_1.DropdownList) `
181
- overflow-y: auto;
182
- overflow-x: hidden;
183
- border-radius: 8px;
184
-
185
- /* Custom scrollbar styling */
186
- &::-webkit-scrollbar {
187
- width: 6px;
188
- }
189
-
190
- &::-webkit-scrollbar-track {
191
- background: ${(props) => props.theme.colors.background.secondary};
192
- border-radius: 3px;
193
- }
194
-
195
- &::-webkit-scrollbar-thumb {
196
- background: #6e6e6e;
197
- border-radius: 3px;
198
- }
199
-
200
- &::-webkit-scrollbar-thumb:hover {
201
- background: #6e6e6e;
202
- }
203
- `;
204
- const LanguageSelectorButton = styled_components_1.default.div `
205
- display: flex;
206
- align-items: center;
207
- justify-content: space-between;
208
- font-family: ${(props) => props.theme.font.family.Lato};
209
- cursor: pointer;
210
- font-size: 14px;
211
- line-height: 24px;
212
- color: ${(props) => props.theme.colors.text.primary};
213
- padding: 10px 16px;
214
- width: 100%;
215
-
216
- &:hover {
217
- background: ${(props) => props.theme.colors.background.fifth};
218
- }
219
- `;
220
- const LanguageHeader = styled_components_1.default.span `
221
- display: flex;
222
- flex-direction: column;
223
- align-items: flex-start;
224
- `;
225
- const LanguageLabel = styled_components_1.default.span `
226
- display: flex;
227
- align-items: center;
228
- font-size: 16px;
229
-
230
- svg {
231
- top: 10px;
232
- right: -10px;
233
- position: relative;
234
- }
235
- `;
236
- const SelectedLanguageText = styled_components_1.default.span `
237
- font-size: 12px;
238
- color: ${(props) => props.theme.colors.text.secondary};
239
- margin-top: 2px;
240
- `;
241
- const LanguageOption = styled_components_1.default.div `
242
- display: flex;
243
- align-items: center;
244
- justify-content: space-between;
245
- font-family: ${(props) => props.theme.font.family.Lato};
246
- cursor: pointer;
247
- font-size: 14px;
248
- line-height: 24px;
249
- color: ${(props) => props.theme.colors.text.primary};
250
- padding: 10px 16px;
251
- `;
252
- const TickIconWrapper = styled_components_1.default.div `
253
- svg path {
254
- fill: #6e6e6e;
255
- }
256
- `;
257
- //# sourceMappingURL=DocumentLanguageSelector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DocumentLanguageSelector.js","sourceRoot":"","sources":["../../../src/components/DocumentLanguageSelector.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,sFAAuD;AACvD,0DAKiC;AACjC,+CAAmE;AACnE,0EAAsC;AAEtC,gDAA4C;AAa5C,2CAA2C;AAC3C,MAAM,YAAY,GAA2B;IAC3C,EAAE,EAAE,SAAS;IACb,EAAE,EAAE,SAAS;IACb,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,SAAS;IACb,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,SAAS;IACb,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,SAAS;CACd,CAAA;AAED,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;AAElD,uCAAuC;AACvC,MAAM,gBAAgB,GAAmB;IACvC,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,SAAS;IACf,UAAU,EAAE,SAAS;IACrB,QAAQ,EAAE,IAAI;CACf,CAAA;AAED,yCAAyC;AACzC,MAAM,uBAAuB,GAAG,CAC9B,gBAAwB,EACxB,YAA8B,EACtB,EAAE;IACV,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,mBAAmB,CAAA;IAC5B,CAAC;IAED,MAAM,IAAI,GACR,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,IAAI,gBAAgB,CAAA;IAE3E,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI;QACvB,CAAC,CAAC,mBAAmB;QACrB,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;AACrE,CAAC,CAAA;AAED,MAAM,kBAAkB,GAInB,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAC3C,8BAAC,cAAc,IACb,GAAG,EAAE,QAAQ,CAAC,IAAI,EAClB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC;IAEjD,QAAQ,CAAC,IAAI;IACb,QAAQ,CAAC,UAAU,IAAI,KAAK,QAAQ,CAAC,UAAU,GAAG;IAClD,UAAU,IAAI,CACb,8BAAC,eAAe;QACd,8BAAC,sBAAQ,OAAG,CACI,CACnB,CACc,CAClB,CAAA;AAED,MAAM,wBAAwB,GAA4C,CAAC,EACzE,aAAa,GACd,EAAE,EAAE;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,IAAA,mBAAQ,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpC,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,IAAI,EAAE,CAAC,CAAC,IAAI;KACb,CAAC,CAAC,CAAA;IAEH,+EAA+E;IAC/E,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,mBAAmB,IAAI,IAAI,CAAA;IAC3E,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAA;IACzD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAmB,EAAE,CAAC,CAAA;IACtE,MAAM,UAAU,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAA;IAE/C,kDAAkD;IAClD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;YAC/B,IAAI,CAAC;gBACH,+CAA+C;gBAC/C,MAAM,mBAAmB,GAAG,wDAC1B,4CAA4C,GAC7C,CAAA;gBACD,4BAAY,CAAC,cAAc,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;gBAExD,mCAAmC;gBACnC,MAAM,aAAa,GAAG,4BAAY,CAAC,cAAc,EAAE,CAAA;gBACnD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC9D,IAAI;oBACJ,IAAI,EAAE,4BAAY,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI;oBAC9C,UAAU,EACR,YAAY,CAAC,IAAI,CAAC,IAAI,4BAAY,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,SAAS;oBACrE,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC;iBAC1C,CAAC,CAAC,CAAA;gBAEH,eAAe,CAAC,aAAa,CAAC,CAAA;YAChC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAA;gBACrD,4CAA4C;gBAC5C,eAAe,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAA;YACrC,CAAC;QACH,CAAC,CAAA;QAED,aAAa,EAAE,CAAA;IACjB,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,uDAAuD;IACvD,MAAM,eAAe,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QACnC,OAAO,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACrC,8BAA8B;YAC9B,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC9B,OAAO,CAAC,CAAC,CAAA;YACX,CAAC;YACD,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC9B,OAAO,CAAC,CAAA;YACV,CAAC;YACD,mCAAmC;YACnC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACrC,CAAC,CAAC,CAAA;IACJ,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAA;IAElB,sCAAsC;IACtC,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,kBAAkB,GAAG,CAAC,KAAiB,EAAE,EAAE;YAC/C,IACE,UAAU,CAAC,OAAO;gBAClB,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAiB,CAAC,EACrD,CAAC;gBACD,gBAAgB,CAAC,KAAK,CAAC,CAAA;gBACvB,aAAa,EAAE,EAAE,CAAA;YACnB,CAAC;QACH,CAAC,CAAA;QAED,IAAI,aAAa,EAAE,CAAC;YAClB,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAA;QAC5D,CAAC;QAED,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAA;QAC/D,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAA;IAElC,MAAM,yBAAyB,GAAG,CAAC,KAAuB,EAAE,EAAE;QAC5D,KAAK,CAAC,eAAe,EAAE,CAAA;QACvB,gBAAgB,CAAC,CAAC,aAAa,CAAC,CAAA;IAClC,CAAC,CAAA;IAED,MAAM,oBAAoB,GAAG,CAC3B,KAAuB,EACvB,YAAoB,EACpB,EAAE;QACF,KAAK,CAAC,eAAe,EAAE,CAAA;QACvB,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,IAAI,CAAA;YAC3C,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAA;YACnB,EAAE,CAAC,eAAe,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAA;YACvD,QAAQ,CAAC,EAAE,CAAC,CAAA;QACd,CAAC;IACH,CAAC,CAAA;IAED,OAAO,CACL,8BAAC,+BAAiB,IAAC,GAAG,EAAE,UAAU;QAChC,8BAAC,sBAAsB,IAAC,OAAO,EAAE,yBAAyB;YACxD,8BAAC,cAAc;gBACb,8BAAC,aAAa;;oBACM,8BAAC,mCAAqB,OAAG,CAC7B;gBAChB,8BAAC,oBAAoB,QAClB,uBAAuB,CAAC,gBAAgB,EAAE,YAAY,CAAC,CACnC,CACR,CACM;QAExB,aAAa,IAAI,CAChB,8BAAC,kBAAkB,IAAC,SAAS,EAAC,OAAO,EAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,IACnE,eAAe,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CACjC,8BAAC,kBAAkB,IACjB,GAAG,EAAE,QAAQ,CAAC,IAAI,EAClB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,gBAAgB,KAAK,QAAQ,CAAC,IAAI,EAC9C,QAAQ,EAAE,oBAAoB,GAC9B,CACH,CAAC,CACiB,CACtB,CACiB,CACrB,CAAA;AACH,CAAC,CAAA;AAED,kBAAe,wBAAwB,CAAA;AAEvC,MAAM,kBAAkB,GAAG,IAAA,2BAAM,EAAC,0BAAY,CAAC,CAAA;;;;;;;;;;;kBAW7B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS;;;;;;;;;;;;CAYnE,CAAA;AAED,MAAM,sBAAsB,GAAG,2BAAM,CAAC,GAAG,CAAA;;;;iBAIxB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;;;;WAI7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;;;;;kBAKnC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK;;CAE/D,CAAA;AAED,MAAM,cAAc,GAAG,2BAAM,CAAC,IAAI,CAAA;;;;CAIjC,CAAA;AAED,MAAM,aAAa,GAAG,2BAAM,CAAC,IAAI,CAAA;;;;;;;;;;CAUhC,CAAA;AAED,MAAM,oBAAoB,GAAG,2BAAM,CAAC,IAAI,CAAA;;WAE7B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS;;CAEtD,CAAA;AAED,MAAM,cAAc,GAAG,2BAAM,CAAC,GAAG,CAAA;;;;iBAIhB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;;;;WAI7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;;CAEpD,CAAA;AAED,MAAM,eAAe,GAAG,2BAAM,CAAC,GAAG,CAAA;;;;CAIjC,CAAA"}
@@ -1,219 +0,0 @@
1
- /*!
2
- * The contents of this file are subject to the Common Public Attribution License Version 1.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://mpapp-public.gitlab.io/manuscripts-frontend/LICENSE. The License is based on the Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover use of software over a computer network and provide for limited attribution for the Original Developer. In addition, Exhibit A has been modified to be consistent with Exhibit B.
3
- *
4
- * Software distributed under the License is distributed on an “AS IS” basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.
5
- *
6
- * The Original Code is manuscripts-frontend.
7
- *
8
- * The Original Developer is the Initial Developer. The Initial Developer of the Original Code is Atypon Systems LLC.
9
- *
10
- * All portions of the code written by Atypon Systems LLC are Copyright (c) 2025 Atypon Systems LLC. All Rights Reserved.
11
- */
12
- import isoLanguages from '@cospired/i18n-iso-languages';
13
- import { DropdownContainer, DropdownList, TickIcon, TriangleCollapsedIcon, } from '@manuscripts/style-guide';
14
- import React, { useEffect, useMemo, useRef, useState } from 'react';
15
- import styled from 'styled-components';
16
- import { useStore } from '../store/useStore';
17
- // Native names lookup for common languages
18
- const NATIVE_NAMES = {
19
- en: 'Default',
20
- es: 'Español',
21
- fr: 'Français',
22
- de: 'Deutsch',
23
- it: 'Italiano',
24
- pt: 'Português',
25
- ru: 'Русский',
26
- ja: '日本語',
27
- ko: '한국어',
28
- zh: '中文',
29
- ar: 'العربية',
30
- };
31
- const COMMON_LANGUAGES = Object.keys(NATIVE_NAMES);
32
- // Fallback language object for English
33
- const ENGLISH_FALLBACK = {
34
- code: 'en',
35
- name: 'English',
36
- nativeName: 'English',
37
- isCommon: true,
38
- };
39
- // Get display name for selected language
40
- const getSelectedLanguageName = (selectedLanguage, allLanguages) => {
41
- if (!allLanguages.length) {
42
- return 'English (Default)';
43
- }
44
- const lang = allLanguages.find((l) => l.code === selectedLanguage) || ENGLISH_FALLBACK;
45
- return lang.code === 'en'
46
- ? 'English (Default)'
47
- : `${lang.name}${lang.nativeName ? ` (${lang.nativeName})` : ''}`;
48
- };
49
- const LanguageOptionItem = ({ language, isSelected, onSelect }) => (React.createElement(LanguageOption, { key: language.code, onClick: (event) => onSelect(event, language.code) },
50
- language.name,
51
- language.nativeName && ` (${language.nativeName})`,
52
- isSelected && (React.createElement(TickIconWrapper, null,
53
- React.createElement(TickIcon, null)))));
54
- const DocumentLanguageSelector = ({ onCloseParent, }) => {
55
- const [storeState] = useStore((s) => ({
56
- doc: s.doc,
57
- view: s.view,
58
- }));
59
- // Get selected language from document's primaryLanguageCode or default to 'en'
60
- const selectedLanguage = storeState.doc?.attrs?.primaryLanguageCode || 'en';
61
- const [isSubmenuOpen, setIsSubmenuOpen] = useState(false);
62
- const [allLanguages, setAllLanguages] = useState([]);
63
- const submenuRef = useRef(null);
64
- // Initialize language data and load all languages
65
- useEffect(() => {
66
- const loadLanguages = async () => {
67
- try {
68
- // Dynamically import the English language data
69
- const englishLanguageData = await import('@cospired/i18n-iso-languages/langs/en.json');
70
- isoLanguages.registerLocale(englishLanguageData.default);
71
- // Get all available language codes
72
- const languageCodes = isoLanguages.getAlpha2Codes();
73
- const languagesList = Object.keys(languageCodes).map((code) => ({
74
- code,
75
- name: isoLanguages.getName(code, 'en') || code,
76
- nativeName: NATIVE_NAMES[code] || isoLanguages.getName(code, code) || undefined,
77
- isCommon: COMMON_LANGUAGES.includes(code),
78
- }));
79
- setAllLanguages(languagesList);
80
- }
81
- catch (error) {
82
- console.error('Failed to load language data:', error);
83
- // Fallback to English only if loading fails
84
- setAllLanguages([ENGLISH_FALLBACK]);
85
- }
86
- };
87
- loadLanguages();
88
- }, []);
89
- // Prepare language options with common languages first
90
- const languageOptions = useMemo(() => {
91
- return [...allLanguages].sort((a, b) => {
92
- // Sort common languages first
93
- if (a.isCommon && !b.isCommon) {
94
- return -1;
95
- }
96
- if (!a.isCommon && b.isCommon) {
97
- return 1;
98
- }
99
- // Then sort alphabetically by name
100
- return a.name.localeCompare(b.name);
101
- });
102
- }, [allLanguages]);
103
- // Close submenu when clicking outside
104
- useEffect(() => {
105
- const handleClickOutside = (event) => {
106
- if (submenuRef.current &&
107
- !submenuRef.current.contains(event.target)) {
108
- setIsSubmenuOpen(false);
109
- onCloseParent?.();
110
- }
111
- };
112
- if (isSubmenuOpen) {
113
- document.addEventListener('mousedown', handleClickOutside);
114
- }
115
- return () => {
116
- document.removeEventListener('mousedown', handleClickOutside);
117
- };
118
- }, [isSubmenuOpen, onCloseParent]);
119
- const handleLanguageButtonClick = (event) => {
120
- event.stopPropagation();
121
- setIsSubmenuOpen(!isSubmenuOpen);
122
- };
123
- const handleLanguageSelect = (event, languageCode) => {
124
- event.stopPropagation();
125
- if (storeState.view) {
126
- const { state, dispatch } = storeState.view;
127
- const tr = state.tr;
128
- tr.setDocAttribute('primaryLanguageCode', languageCode);
129
- dispatch(tr);
130
- }
131
- };
132
- return (React.createElement(DropdownContainer, { ref: submenuRef },
133
- React.createElement(LanguageSelectorButton, { onClick: handleLanguageButtonClick },
134
- React.createElement(LanguageHeader, null,
135
- React.createElement(LanguageLabel, null,
136
- "Document language ",
137
- React.createElement(TriangleCollapsedIcon, null)),
138
- React.createElement(SelectedLanguageText, null, getSelectedLanguageName(selectedLanguage, allLanguages)))),
139
- isSubmenuOpen && (React.createElement(StyledDropdownList, { direction: "right", width: 231, top: 18, height: 400 }, languageOptions.map((language) => (React.createElement(LanguageOptionItem, { key: language.code, language: language, isSelected: selectedLanguage === language.code, onSelect: handleLanguageSelect })))))));
140
- };
141
- export default DocumentLanguageSelector;
142
- const StyledDropdownList = styled(DropdownList) `
143
- overflow-y: auto;
144
- overflow-x: hidden;
145
- border-radius: 8px;
146
-
147
- /* Custom scrollbar styling */
148
- &::-webkit-scrollbar {
149
- width: 6px;
150
- }
151
-
152
- &::-webkit-scrollbar-track {
153
- background: ${(props) => props.theme.colors.background.secondary};
154
- border-radius: 3px;
155
- }
156
-
157
- &::-webkit-scrollbar-thumb {
158
- background: #6e6e6e;
159
- border-radius: 3px;
160
- }
161
-
162
- &::-webkit-scrollbar-thumb:hover {
163
- background: #6e6e6e;
164
- }
165
- `;
166
- const LanguageSelectorButton = styled.div `
167
- display: flex;
168
- align-items: center;
169
- justify-content: space-between;
170
- font-family: ${(props) => props.theme.font.family.Lato};
171
- cursor: pointer;
172
- font-size: 14px;
173
- line-height: 24px;
174
- color: ${(props) => props.theme.colors.text.primary};
175
- padding: 10px 16px;
176
- width: 100%;
177
-
178
- &:hover {
179
- background: ${(props) => props.theme.colors.background.fifth};
180
- }
181
- `;
182
- const LanguageHeader = styled.span `
183
- display: flex;
184
- flex-direction: column;
185
- align-items: flex-start;
186
- `;
187
- const LanguageLabel = styled.span `
188
- display: flex;
189
- align-items: center;
190
- font-size: 16px;
191
-
192
- svg {
193
- top: 10px;
194
- right: -10px;
195
- position: relative;
196
- }
197
- `;
198
- const SelectedLanguageText = styled.span `
199
- font-size: 12px;
200
- color: ${(props) => props.theme.colors.text.secondary};
201
- margin-top: 2px;
202
- `;
203
- const LanguageOption = styled.div `
204
- display: flex;
205
- align-items: center;
206
- justify-content: space-between;
207
- font-family: ${(props) => props.theme.font.family.Lato};
208
- cursor: pointer;
209
- font-size: 14px;
210
- line-height: 24px;
211
- color: ${(props) => props.theme.colors.text.primary};
212
- padding: 10px 16px;
213
- `;
214
- const TickIconWrapper = styled.div `
215
- svg path {
216
- fill: #6e6e6e;
217
- }
218
- `;
219
- //# sourceMappingURL=DocumentLanguageSelector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DocumentLanguageSelector.js","sourceRoot":"","sources":["../../../src/components/DocumentLanguageSelector.tsx"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- /*!
2
- * The contents of this file are subject to the Common Public Attribution License Version 1.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://mpapp-public.gitlab.io/manuscripts-frontend/LICENSE. The License is based on the Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover use of software over a computer network and provide for limited attribution for the Original Developer. In addition, Exhibit A has been modified to be consistent with Exhibit B.
3
- *
4
- * Software distributed under the License is distributed on an “AS IS” basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.
5
- *
6
- * The Original Code is manuscripts-frontend.
7
- *
8
- * The Original Developer is the Initial Developer. The Initial Developer of the Original Code is Atypon Systems LLC.
9
- *
10
- * All portions of the code written by Atypon Systems LLC are Copyright (c) 2025 Atypon Systems LLC. All Rights Reserved.
11
- */
12
- import React from 'react';
13
- interface DocumentLanguageSelectorProps {
14
- onCloseParent?: () => void;
15
- }
16
- declare const DocumentLanguageSelector: React.FC<DocumentLanguageSelectorProps>;
17
- export default DocumentLanguageSelector;