From 7e0c7737155b2ad10cddebf6d775fe279001868e Mon Sep 17 00:00:00 2001 From: Kouji Takao Date: Tue, 20 Jan 2026 09:58:01 +0900 Subject: [PATCH 1/3] fix(scratch-gui): restore Smalruby specific assets and locales - Restore custom locales in src/locales and update locales reducer - Restore Smalruby default project (Hatti) and its assets - Replace cat icons with Hatti icons in ComingSoon component - Add missing PWA icon Co-Authored-By: Gemini --- .../src/components/coming-soon/aww-cat.png | Bin 4467 -> 0 bytes .../components/coming-soon/coming-soon.jsx | 6 +- .../src/components/coming-soon/cool-cat.png | Bin 3829 -> 0 bytes .../src/components/coming-soon/icon-hatti.png | Bin 0 -> 6416 bytes .../components/coming-soon/icon2-hatti.png | Bin 0 -> 6737 bytes .../0fb9be3e8397c983338cb71dc84d0b25.svg | 42 --- .../7499cf6ec438d0c7af6f896bc6adc294.svg | 33 +++ .../83c36d806dc92327b9e7049a565c6bff.wav | Bin 37420 -> 0 bytes .../bcf454acf82e4504149f7ffe07081dbc.svg | 42 --- .../cf51a0c4088942d95bcc20af13202710.wav | Bin 0 -> 13068 bytes .../src/lib/default-project/index.ts | 20 +- .../src/lib/default-project/project-data.ts | 25 +- packages/scratch-gui/src/locales/en.js | 212 ++++++++++++++ packages/scratch-gui/src/locales/index.js | 18 ++ packages/scratch-gui/src/locales/ja-Hira.js | 226 +++++++++++++++ packages/scratch-gui/src/locales/ja.js | 263 ++++++++++++++++++ packages/scratch-gui/src/reducers/locales.js | 2 +- packages/scratch-gui/static/pwa-icon.png | Bin 0 -> 110739 bytes 18 files changed, 771 insertions(+), 118 deletions(-) delete mode 100644 packages/scratch-gui/src/components/coming-soon/aww-cat.png delete mode 100644 packages/scratch-gui/src/components/coming-soon/cool-cat.png create mode 100644 packages/scratch-gui/src/components/coming-soon/icon-hatti.png create mode 100644 packages/scratch-gui/src/components/coming-soon/icon2-hatti.png delete mode 100644 packages/scratch-gui/src/lib/default-project/0fb9be3e8397c983338cb71dc84d0b25.svg create mode 100644 packages/scratch-gui/src/lib/default-project/7499cf6ec438d0c7af6f896bc6adc294.svg delete mode 100755 packages/scratch-gui/src/lib/default-project/83c36d806dc92327b9e7049a565c6bff.wav delete mode 100644 packages/scratch-gui/src/lib/default-project/bcf454acf82e4504149f7ffe07081dbc.svg create mode 100644 packages/scratch-gui/src/lib/default-project/cf51a0c4088942d95bcc20af13202710.wav create mode 100644 packages/scratch-gui/src/locales/en.js create mode 100644 packages/scratch-gui/src/locales/index.js create mode 100644 packages/scratch-gui/src/locales/ja-Hira.js create mode 100644 packages/scratch-gui/src/locales/ja.js create mode 100644 packages/scratch-gui/static/pwa-icon.png diff --git a/packages/scratch-gui/src/components/coming-soon/aww-cat.png b/packages/scratch-gui/src/components/coming-soon/aww-cat.png deleted file mode 100644 index bddfb8de9ee95ccef600bcb6a67ce5ed3c5ed4d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4467 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 diff --git a/packages/scratch-gui/src/components/coming-soon/icon-hatti.png b/packages/scratch-gui/src/components/coming-soon/icon-hatti.png new file mode 100644 index 0000000000000000000000000000000000000000..eb16edb33111a2b3be9b37448f8c062b3e4f64f9 GIT binary patch literal 6416 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 literal 0 HcmV?d00001 diff --git a/packages/scratch-gui/src/lib/default-project/0fb9be3e8397c983338cb71dc84d0b25.svg b/packages/scratch-gui/src/lib/default-project/0fb9be3e8397c983338cb71dc84d0b25.svg deleted file mode 100644 index 5ff997fd111..00000000000 --- a/packages/scratch-gui/src/lib/default-project/0fb9be3e8397c983338cb71dc84d0b25.svg +++ /dev/null @@ -1,42 +0,0 @@ - - - - costume2.1 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/scratch-gui/src/lib/default-project/7499cf6ec438d0c7af6f896bc6adc294.svg b/packages/scratch-gui/src/lib/default-project/7499cf6ec438d0c7af6f896bc6adc294.svg new file mode 100644 index 00000000000..544af6b966a --- /dev/null +++ b/packages/scratch-gui/src/lib/default-project/7499cf6ec438d0c7af6f896bc6adc294.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/scratch-gui/src/lib/default-project/83c36d806dc92327b9e7049a565c6bff.wav b/packages/scratch-gui/src/lib/default-project/83c36d806dc92327b9e7049a565c6bff.wav deleted file mode 100755 index 45742d5ef6f09d05b0f0788cb055ffe54abfd9ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37420 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 - - - costume1.1 - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/scratch-gui/src/lib/default-project/cf51a0c4088942d95bcc20af13202710.wav b/packages/scratch-gui/src/lib/default-project/cf51a0c4088942d95bcc20af13202710.wav new file mode 100644 index 0000000000000000000000000000000000000000..a07a948fda5d6b89f50f3be04f7c77dea1ea57ea GIT binary patch literal 13068 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 { dataFormat: 'WAV', data: new Uint8Array(popWav) }, { - id: '83c36d806dc92327b9e7049a565c6bff', + id: 'cf51a0c4088942d95bcc20af13202710', assetType: 'Sound', dataFormat: 'WAV', - data: new Uint8Array(meowWav) + data: new Uint8Array(hattiMeowWav) }, { id: 'cd21514d0531fdffb22204e0ec5ed84a', assetType: 'ImageVector', dataFormat: 'SVG', data: encoder.encode(backdrop) }, { - id: 'bcf454acf82e4504149f7ffe07081dbc', + id: '7499cf6ec438d0c7af6f896bc6adc294', assetType: 'ImageVector', dataFormat: 'SVG', - data: encoder.encode(costume1) - }, { - id: '0fb9be3e8397c983338cb71dc84d0b25', - assetType: 'ImageVector', - dataFormat: 'SVG', - data: encoder.encode(costume2) + data: encoder.encode(hattiCostume) }]; }; -export default defaultProject; +export default defaultProject; \ No newline at end of file diff --git a/packages/scratch-gui/src/lib/default-project/project-data.ts b/packages/scratch-gui/src/lib/default-project/project-data.ts index 2effe2ed24e..d587ece3845 100644 --- a/packages/scratch-gui/src/lib/default-project/project-data.ts +++ b/packages/scratch-gui/src/lib/default-project/project-data.ts @@ -62,33 +62,24 @@ const projectData = (translateFunction?: TranslatorFunction): object => { currentCostume: 0, costumes: [ { - assetId: 'bcf454acf82e4504149f7ffe07081dbc', + assetId: '7499cf6ec438d0c7af6f896bc6adc294', name: translator(messages.costume, {index: 1}), bitmapResolution: 1, - md5ext: 'bcf454acf82e4504149f7ffe07081dbc.svg', + md5ext: '7499cf6ec438d0c7af6f896bc6adc294.svg', dataFormat: 'svg', - rotationCenterX: 48, - rotationCenterY: 50 - }, - { - assetId: '0fb9be3e8397c983338cb71dc84d0b25', - name: translator(messages.costume, {index: 2}), - bitmapResolution: 1, - md5ext: '0fb9be3e8397c983338cb71dc84d0b25.svg', - dataFormat: 'svg', - rotationCenterX: 46, - rotationCenterY: 53 + rotationCenterX: 87, + rotationCenterY: 39 } ], sounds: [ { - assetId: '83c36d806dc92327b9e7049a565c6bff', + assetId: 'cf51a0c4088942d95bcc20af13202710', name: translator(messages.meow), dataFormat: 'wav', format: '', - rate: 22050, - sampleCount: 18688, - md5ext: '83c36d806dc92327b9e7049a565c6bff.wav' + rate: 44100, + sampleCount: 26048, + md5ext: 'cf51a0c4088942d95bcc20af13202710.wav' } ], volume: 100, diff --git a/packages/scratch-gui/src/locales/en.js b/packages/scratch-gui/src/locales/en.js new file mode 100644 index 00000000000..92b4c92750f --- /dev/null +++ b/packages/scratch-gui/src/locales/en.js @@ -0,0 +1,212 @@ +export default { + "gui.smalruby3.crashMessage.description": "We are so sorry, but it looks like Smalruby has crashed. This bug has been automatically reported to the Smalruby Team. Please refresh your page to try again.", + "gui.smalruby3.gui.defaultProjectTitle": "Smalruby Project", + "gui.smalruby3.gui.rubyTab": "Ruby", + "gui.smalruby3.previewInfo.betawelcome": "Welcome to the Smalruby 3.0 Beta", + "gui.smalruby3.previewInfo.label": "Try Smalruby 3.0", + "gui.smalruby3.previewInfo.invitation": "We're working on the next generation of Smalruby. We're excited for you to try it!", + "gui.smalruby3.previewInfo.welcome": "Welcome to the Smalruby 3.0 Preview", + 'gui.smalruby3.menuBar.downloadRubyCodeToComputer': 'Save Ruby to your computer', + "gui.menuBar.meshV2": "Mesh", + "gui.smalruby3.menuBar.generateRubyFromCode": "Generate Ruby from Code", + "gui.smalruby3.unsupportedBrowser.notRecommended": "We are very sorry, but it looks like you are using a browser version that Smalruby 3.0 does not support. We recommend updating to the latest version of a supported browser such as Google Chrome, Mozilla Firefox, Microsoft Edge, or Apple Safari. ", + "gui.smalruby3.unsupportedBrowser.description": "We're very sorry, but Smalruby 3.0 does not support Internet Explorer, Vivaldi, Opera or Silk. We recommend trying a newer browser such as Google Chrome, Mozilla Firefox, or Microsoft Edge.", + "gui.smalruby3.unsupportedBrowser.previewfaq": "Smalruby is based Scratch 3.0. So to learn more, go to the {previewFaqLink}.", + "gui.smalruby3.webglModal.description": "Unfortunately it looks like your browser or computer {webGlLink}. This technology is needed for Smalruby 3.0 to run.", + "gui.smalruby3.alerts.convertRubyToBlocksError": "Could not convert Ruby to Code. Please fix Ruby!", + "gui.smalruby3.telemetryOptIn.label": "Report statistics to improve Smalruby", + "gui.smalruby3.telemetryOptIn.body1": "The Smalruby Team is always looking to better understand how Smalruby is used around the world. To help support this effort, you can allow Smalruby to automatically send usage information to the Smalruby Team.", + "gui.smalruby3.telemetryOptIn.body2": "The information we collect includes language selection, blocks usage, and some events like saving, loading, and uploading a project. We DO NOT collect any personal information.", + "gui.telemetryOptIn.buttonTextNo": "No, thanks", + "gui.extensionLibrary.showAllExtensions": "Show all extensions", + 'gui.smalruby3.rubyToBlocksConverter.couldNotConvertPrimitive': '"{ SOURCE }" could not be converted the block.', + 'gui.smalruby3.rubyToBlocksConverter.wrongInstruction': '"{ SOURCE }" is the wrong instruction.', + "gui.smalruby3.telemetryOptIn.buttonTextYes": "Yes, I'd like to help improve Smalruby", + 'gui.smalruby3.extension.mesh.name': 'Mesh', + 'gui.smalruby3.extension.mesh.description': 'Allowing users to interact over a computer network.', + 'mesh.categoryName': 'Mesh', + 'mesh.sensorValue': '[NAME] sensor value', + 'mesh.hostPeripheralName': 'Become Mesh Host [{ MESH_ID }]', + 'mesh.clientPeripheralName': 'Join Mesh [{ MESH_ID }]', + 'mesh.registeredHost': 'Registered Host Mesh [{ MESH_ID }]', + 'mesh.joinedMesh': 'Joined Mesh [{ MESH_ID }]', + 'mesh.notConnectedMenu': '! Disconnected', + 'mesh.registeredHostMenu': '✔【{ MESH_ID }】 ⏳️{ EXPIRES_AT }', + 'mesh.joinedMeshMenu': '✔【{ MESH_ID }】 ⏳️{ EXPIRES_AT }', + 'gui.smalruby3.extension.mesh.connectingMessage': 'Connecting', + 'gui.smalruby3.extension.meshV2.name': 'Mesh V2', + 'mesh.notConnected': 'Not connected (Mesh)', + 'mesh.domain': 'Domain: {domain}', + 'mesh.domainNotSet': 'Not set', + 'mesh.domainModalTitle': 'Mesh V2 Domain Settings', + 'mesh.domainPlaceholder': 'Enter domain name...', + 'mesh.domainSaveButton': 'Save', + 'mesh.domainCancelButton': 'Cancel', + 'mesh.domainConnectedAlert': 'Mesh V2 is connected. To change the domain, please disconnect first.', + 'mesh.domainInvalidError': 'Domain name contains invalid characters.', + 'mesh.domainTooLongError': 'Domain name is too long (max 256 characters).', + 'mesh.domainDescription': 'If the host is not displayed, please set the domain. The zip code of a facility such as a school is ideal.', + 'mesh.domainExampleTitle': 'Example', + 'mesh.domainExample': '100-0014', + 'gui.smalruby3.extension.smalrubotS1.name': 'Smalrubot S1', + 'gui.smalruby3.extension.smalrubotS1.description': 'Control the Smalrubot S1.', + 'gui.smalruby3.extension.smalrubotS1.connectingMessage': 'Connecting the Smalrubot S1', + 'smalrubotS1.categoryName': 'Smalrubot S1', + 'smalrubotS1.action': '[ACTION] (M1, M2)', + 'smalrubotS1.actionAndStopAfter': '[ACTION] for [SECS] seconds (M1, M2)', + 'smalrubotS1.bendArm': 'bend arm (D10) [DEGREE] degrees in [SECS] seconds', + 'smalrubotS1.getSensorValue': '[POSITION] sensor value', + 'smalrubotS1.turnLedOn': 'turn [POSITION] LED on (left:A0, right:A1)', + 'smalrubotS1.turnLedOff': 'turn [POSITION] LED off (left:A0, right:A1)', + 'smalrubotS1.getMotorSpeed': '[POSITION] DC motor speed (%) (left:M1, right:M2)', + 'smalrubotS1.setMotorSpeed': 'set [POSITION] DC motor speed [SPEED] (%) (left:M1, right:M2)', + 'smalrubotS1.setArmCalibration': 'Adjust arm (D10) [DEGREE] degrees', + 'smalrubotS1.actionMenu.forward': 'forward', + 'smalrubotS1.actionMenu.backward': 'backward', + 'smalrubotS1.actionMenu.turnLeft': 'turn left', + 'smalrubotS1.actionMenu.turnRight': 'turn right', + 'smalrubotS1.positionsMenu.left': 'left', + 'smalrubotS1.positionsMenu.right': 'right', + 'smalrubotS1.sensorPositionsMenu.left': 'left (A4)', + 'smalrubotS1.sensorPositionsMenu.right': 'right (A5)', + 'smalrubotS1.sensorPositionsMenu.touch': 'touch (A2)', + 'smalrubotS1.sensorPositionsMenu.light': 'light (A6)', + 'smalrubotS1.sensorPositionsMenu.sound': 'sound (A7)', + 'gui.smalruby3.blockDisplayModal.title': 'Block Display Settings', + 'gui.smalruby3.blockDisplayModal.selectAll': 'Select All', + 'gui.smalruby3.blockDisplayModal.selectNone': 'Select None', + 'gui.smalruby3.blockDisplayModal.alwaysVisible': 'Always visible', + 'gui.smalruby3.blockDisplayModal.extensions': 'Extensions', + 'gui.smalruby3.blockDisplayModal.categoriesTitle': 'Categories:', + 'gui.smalruby3.blockDisplayModal.alwaysVisibleTitle': 'Always Visible:', + 'gui.smalruby3.blockDisplayModal.blocksSubtitle': ' Blocks', + 'gui.menuBar.blockDisplay': 'Block Display...', + "gui.menuBar.learn": "Learn", + 'gui.menuBar.koshienEntryForm': 'Entry Form', + + // Block Display Modal - Block Messages + // Motion blocks + 'gui.smalruby3.blockDisplayModal.motion_movesteps': 'move (10) steps', + 'gui.smalruby3.blockDisplayModal.motion_turnright': 'turn ↻ (15) degrees', + 'gui.smalruby3.blockDisplayModal.motion_turnleft': 'turn ↺ (15) degrees', + 'gui.smalruby3.blockDisplayModal.motion_goto': 'go to (random position ▼)', + 'gui.smalruby3.blockDisplayModal.motion_gotoxy': 'go to x: (0) y: (0)', + 'gui.smalruby3.blockDisplayModal.motion_glideto': 'glide (1) secs to (random position ▼)', + 'gui.smalruby3.blockDisplayModal.motion_glidesecstoxy': 'glide (1) secs to x: (0) y: (0)', + 'gui.smalruby3.blockDisplayModal.motion_pointindirection': 'point in direction (90)', + 'gui.smalruby3.blockDisplayModal.motion_pointtowards': 'point towards (mouse-pointer ▼)', + 'gui.smalruby3.blockDisplayModal.motion_changexby': 'change x by (10)', + 'gui.smalruby3.blockDisplayModal.motion_setx': 'set x to (0)', + 'gui.smalruby3.blockDisplayModal.motion_changeyby': 'change y by (10)', + 'gui.smalruby3.blockDisplayModal.motion_sety': 'set y to (0)', + 'gui.smalruby3.blockDisplayModal.motion_ifonedgebounce': 'if on edge, bounce', + 'gui.smalruby3.blockDisplayModal.motion_setrotationstyle': 'set rotation style [left-right ▼]', + + // Looks blocks + 'gui.smalruby3.blockDisplayModal.looks_sayforsecs': 'say (Hello!) for (2) seconds', + 'gui.smalruby3.blockDisplayModal.looks_say': 'say (Hello!)', + 'gui.smalruby3.blockDisplayModal.looks_thinkforsecs': 'think (Hmm...) for (2) seconds', + 'gui.smalruby3.blockDisplayModal.looks_think': 'think (Hmm...)', + 'gui.smalruby3.blockDisplayModal.looks_switchbackdropto': 'switch backdrop to (backdrop1 ▼)', + 'gui.smalruby3.blockDisplayModal.looks_switchbackdroptoandwait': '[Stage] switch backdrop to (backdrop1 ▼) and wait', + 'gui.smalruby3.blockDisplayModal.looks_nextbackdrop': 'next backdrop', + 'gui.smalruby3.blockDisplayModal.looks_switchcostumeto': 'switch costume to (costume1 ▼)', + 'gui.smalruby3.blockDisplayModal.looks_nextcostume': 'next costume', + 'gui.smalruby3.blockDisplayModal.looks_changesizeby': 'change size by (10)', + 'gui.smalruby3.blockDisplayModal.looks_setsizeto': 'set size to (100) %', + 'gui.smalruby3.blockDisplayModal.looks_changeeffectby': 'change [color ▼] effect by (25)', + 'gui.smalruby3.blockDisplayModal.looks_seteffectto': 'set [color ▼] effect to (0)', + 'gui.smalruby3.blockDisplayModal.looks_cleargraphiceffects': 'clear graphic effects', + 'gui.smalruby3.blockDisplayModal.looks_show': 'show', + 'gui.smalruby3.blockDisplayModal.looks_hide': 'hide', + 'gui.smalruby3.blockDisplayModal.looks_gotofrontback': 'go to [front ▼] layer', + 'gui.smalruby3.blockDisplayModal.looks_goforwardbackwardlayers': 'go [forward ▼] (1) layers', + 'gui.smalruby3.blockDisplayModal.looks_costumenumbername': 'costume [number ▼]', + 'gui.smalruby3.blockDisplayModal.looks_backdropnumbername': 'backdrop [number ▼]', + 'gui.smalruby3.blockDisplayModal.looks_size': 'size', + + // Sound blocks + 'gui.smalruby3.blockDisplayModal.sound_playuntildone': 'play sound (Meow ▼) until done', + 'gui.smalruby3.blockDisplayModal.sound_play': 'start sound (Meow ▼)', + 'gui.smalruby3.blockDisplayModal.sound_stopallsounds': 'stop all sounds', + 'gui.smalruby3.blockDisplayModal.sound_changeeffectby': 'change [pitch ▼] effect by (10)', + 'gui.smalruby3.blockDisplayModal.sound_seteffectto': 'set [pitch ▼] effect to (100)', + 'gui.smalruby3.blockDisplayModal.sound_cleareffects': 'clear sound effects', + 'gui.smalruby3.blockDisplayModal.sound_changevolumeby': 'change volume by (-10)', + 'gui.smalruby3.blockDisplayModal.sound_setvolumeto': 'set volume to (100) %', + + // Event blocks + 'gui.smalruby3.blockDisplayModal.event_whenflagclicked': 'when 🏁 clicked', + 'gui.smalruby3.blockDisplayModal.event_whenkeypressed': 'when [space ▼] key pressed', + 'gui.smalruby3.blockDisplayModal.event_whenthisspriteclicked': 'when this sprite clicked', + 'gui.smalruby3.blockDisplayModal.event_whenbackdropswitchesto': 'when backdrop switches to [backdrop1 ▼]', + 'gui.smalruby3.blockDisplayModal.event_whengreaterthan': 'when [loudness ▼] > (10)', + 'gui.smalruby3.blockDisplayModal.event_whenbroadcastreceived': 'when I receive [message1 ▼]', + 'gui.smalruby3.blockDisplayModal.event_broadcast': 'broadcast (message1 ▼)', + 'gui.smalruby3.blockDisplayModal.event_broadcastandwait': 'broadcast (message1 ▼) and wait', + + // Control blocks + 'gui.smalruby3.blockDisplayModal.control_wait': 'wait (1) seconds', + 'gui.smalruby3.blockDisplayModal.control_repeat': 'repeat (10)', + 'gui.smalruby3.blockDisplayModal.control_forever': 'forever', + 'gui.smalruby3.blockDisplayModal.control_if': 'if 〈 〉 then', + 'gui.smalruby3.blockDisplayModal.control_if_else': 'if 〈 〉 then', + 'gui.smalruby3.blockDisplayModal.control_wait_until': 'wait until 〈 〉', + 'gui.smalruby3.blockDisplayModal.control_repeat_until': 'repeat until 〈 〉', + 'gui.smalruby3.blockDisplayModal.control_stop': 'stop [all ▼]', + 'gui.smalruby3.blockDisplayModal.control_start_as_clone': 'when I start as a clone', + 'gui.smalruby3.blockDisplayModal.control_create_clone_of': 'create clone of (myself ▼)', + 'gui.smalruby3.blockDisplayModal.control_delete_this_clone': 'delete this clone', + + // Sensing blocks + 'gui.smalruby3.blockDisplayModal.sensing_touchingobject': 'touching (mouse-pointer ▼)?', + 'gui.smalruby3.blockDisplayModal.sensing_touchingcolor': 'touching color 🎨?', + 'gui.smalruby3.blockDisplayModal.sensing_coloristouchingcolor': 'color 🎨 is touching 🎨?', + 'gui.smalruby3.blockDisplayModal.sensing_distanceto': 'distance to (mouse-pointer ▼)', + 'gui.smalruby3.blockDisplayModal.sensing_askandwait': 'ask (What\'s your name?) and wait', + 'gui.smalruby3.blockDisplayModal.sensing_answer': 'answer', + 'gui.smalruby3.blockDisplayModal.sensing_keypressed': 'key (space ▼) pressed?', + 'gui.smalruby3.blockDisplayModal.sensing_mousedown': 'mouse down?', + 'gui.smalruby3.blockDisplayModal.sensing_mousex': 'mouse x', + 'gui.smalruby3.blockDisplayModal.sensing_mousey': 'mouse y', + 'gui.smalruby3.blockDisplayModal.sensing_setdragmode': 'set drag mode [draggable ▼]', + 'gui.smalruby3.blockDisplayModal.sensing_loudness': 'loudness', + 'gui.smalruby3.blockDisplayModal.sensing_timer': 'timer', + 'gui.smalruby3.blockDisplayModal.sensing_resettimer': 'reset timer', + 'gui.smalruby3.blockDisplayModal.sensing_of': '[backdrop # ▼] of (Stage ▼)', + 'gui.smalruby3.blockDisplayModal.sensing_current': 'current [year ▼]', + 'gui.smalruby3.blockDisplayModal.sensing_dayssince2000': 'days since 2000', + 'gui.smalruby3.blockDisplayModal.sensing_username': 'username', + + // Operator blocks + 'gui.smalruby3.blockDisplayModal.operator_add': '( ) + ( )', + 'gui.smalruby3.blockDisplayModal.operator_subtract': '( ) - ( )', + 'gui.smalruby3.blockDisplayModal.operator_multiply': '( ) * ( )', + 'gui.smalruby3.blockDisplayModal.operator_divide': '( ) / ( )', + 'gui.smalruby3.blockDisplayModal.operator_random': 'pick random (1) to (10)', + 'gui.smalruby3.blockDisplayModal.operator_gt': '( ) > (50)', + 'gui.smalruby3.blockDisplayModal.operator_lt': '( ) < (50)', + 'gui.smalruby3.blockDisplayModal.operator_equals': '( ) = (50)', + 'gui.smalruby3.blockDisplayModal.operator_and': '〈 〉 and 〈 〉', + 'gui.smalruby3.blockDisplayModal.operator_or': '〈 〉 or 〈 〉', + 'gui.smalruby3.blockDisplayModal.operator_not': 'not 〈 〉', + 'gui.smalruby3.blockDisplayModal.operator_join': 'join (apple) (banana)', + 'gui.smalruby3.blockDisplayModal.operator_letter_of': 'letter (1) of (apple)', + 'gui.smalruby3.blockDisplayModal.operator_length': 'length of (apple)', + 'gui.smalruby3.blockDisplayModal.operator_contains': '(apple) contains (a)?', + 'gui.smalruby3.blockDisplayModal.operator_mod': '( ) mod ( )', + 'gui.smalruby3.blockDisplayModal.operator_round': 'round ( )', + 'gui.smalruby3.blockDisplayModal.operator_mathop': '[abs ▼] of ( )', + + // URL Loader messages + 'gui.urlLoader.loadError': 'The project URL that was entered failed to load.', + 'gui.urlLoader.invalidUrl': 'Please enter a valid Scratch project URL or Google Drive URL.', + 'gui.urlLoader.title': 'Load from URL', + 'gui.urlLoader.urlPlaceholder': 'Enter project URL...', + 'gui.urlLoader.openButton': 'Open', + 'gui.urlLoader.cancelButton': 'Cancel', + 'gui.urlLoader.urlExamplesTitle': 'URL Examples', + 'gui.urlLoader.urlExampleScratch': 'https://scratch.mit.edu/projects/{project_id}/', + 'gui.urlLoader.urlExampleGoogleDrive': 'https://drive.google.com/file/d/{file_id}/view?usp=drive_link', + 'gui.modal.stop': 'Stop' +}; diff --git a/packages/scratch-gui/src/locales/index.js b/packages/scratch-gui/src/locales/index.js new file mode 100644 index 00000000000..56dd87451ae --- /dev/null +++ b/packages/scratch-gui/src/locales/index.js @@ -0,0 +1,18 @@ +import messages from 'scratch-l10n/locales/editor-msgs'; +import en from './en'; +import ja from './ja'; +import jaHira from './ja-Hira'; + +const langs = { + "en": en, + "ja": ja, + "ja-Hira": jaHira +}; + +Object.keys(langs).forEach(lang => { + if (messages[lang]) { + Object.assign(messages[lang], langs[lang]); + } +}); + +export default messages; diff --git a/packages/scratch-gui/src/locales/ja-Hira.js b/packages/scratch-gui/src/locales/ja-Hira.js new file mode 100644 index 00000000000..0628ae61881 --- /dev/null +++ b/packages/scratch-gui/src/locales/ja-Hira.js @@ -0,0 +1,226 @@ +export default { + 'gui.modal.reload': 'さいよみこみ', + 'gui.menuBar.meshV2': 'メッシュ', + 'gui.menuBar.loadFromUrl': 'Scratchからよみこむ', + 'gui.urlLoader.loadError': 'プロジェクトURLのよみこみにしっぱいしました。', + 'gui.urlLoader.invalidUrl': 'ゆうこうなScratchプロジェクトURLをにゅうりょくしてください。', + 'gui.urlLoader.title': 'Scratchからよみこむ', + 'gui.urlLoader.urlPlaceholder': 'プロジェクトのURLをにゅうりょく...', + 'gui.urlLoader.openButton': 'ひらく', + 'gui.urlLoader.cancelButton': 'キャンセル', + 'gui.urlLoader.urlExamplesTitle': 'URLのれい', + 'gui.urlLoader.urlExampleScratch': 'https://scratch.mit.edu/projects/1234567/', + 'gui.menuBar.seeProjectPage': 'プロジェクトページをみる', + 'gui.loader.creating': 'プロジェクトをさくせいちゅう...', + 'gui.smalruby3.crashMessage.description': 'もうしわけありません。スモウルビーがクラッシュしたようです。このバグはじどうてきにスモウルビーチームにほうこくされました。ページをさいよみこみしてください。', + 'gui.smalruby3.gui.defaultProjectTitle': 'スモウルビーのプロジェクト', + 'gui.smalruby3.gui.rubyTab': 'ルビー', + 'gui.smalruby3.previewInfo.betawelcome': 'スモウルビー3.0 ベータばんにようこそ!', + 'gui.smalruby3.previewInfo.label': 'スモウルビー3.0をためしてみる', + 'gui.smalruby3.previewInfo.invitation': 'わたしたちはじせだいのスモウルビーをかいはつちゅうです。おためしください!', + 'gui.smalruby3.previewInfo.welcome': 'スモウルビー3.0 プレビューばんにようこそ!', + 'gui.smalruby3.menuBar.downloadRubyCodeToComputer': 'コンピュータにルビーをほぞんする', + 'gui.smalruby3.menuBar.generateRubyFromCode': 'コードからルビーにへんかんします', + 'gui.smalruby3.unsupportedBrowser.notRecommended': 'もうしわけありません。スモウルビー3.0はおつかいのバージョンのブラウザをサポートしていません。グーグル クローム、モジラ ファイアーフォックス、マイクロソフト エッジ、アップル サファリのようなサポートしているさいしんのバージョンにアップデートすることをおすすめします。', + 'gui.smalruby3.unsupportedBrowser.description': 'もうしわけありません。スモウルビー3.0はインターネットエクスプローラ、ビヴァルディ、オペラ、シルクをサポートしていません。グーグル クローム、モジラ ファイアーフォックス、マイクロソフト エッジのようなあたらしいブラウザのりようをおすすめします。', + 'gui.smalruby3.unsupportedBrowser.previewfaq': 'スモウルビーは スクラッチ 3.0をベースにかいはつしていますので、くわしくしりたいばあいは スクラッチ の {previewFaqLink} をごらんください。', + 'gui.smalruby3.webglModal.description': 'ざんねんながら、ブラウザーやコンピューターが{webGlLink}ようです。このぎじゅつはスモウルビー3.0のじっこうにひっすです。', + 'gui.smalruby3.alerts.convertRubyToBlocksError': 'ルビーからコードにへんかんできませんでした。ルビーをなおしてください!', + 'gui.smalruby3.telemetryOptIn.label': 'スモウルビーをかいぜんするためのりようじょうきょうのほうこく', + 'gui.smalruby3.telemetryOptIn.body1': 'スモウルビーのかいはつしゃはせかいじゅうでスモウルビーがどのようにつかわれているのかをりかいしたいとかんがえています。そのてだすけのために、みなさんのスモウルビーのりようじょうきょうをスモウルビーのかいはつしゃにていきょうしていただけないでしょうか。', + 'gui.smalruby3.telemetryOptIn.body2': 'ていきょうしていただくじょうほうにはどのげんごをせんたくしたか、どのブロックをつかったか、ほぞん・よみこみ・プロジェクトのアップロードなどのイベントをふくみます。ただし、ユーザめいなどのこじんてきなじょうほうはいっさいふくみません。', + 'gui.telemetryOptIn.buttonTextNo': 'いいえ、けっこうです。', + 'gui.smalruby3.rubyToBlocksConverter.couldNotConvertPrimitive': '「{ SOURCE }」はブロックにへんかんできません。', + 'gui.smalruby3.rubyToBlocksConverter.wrongInstruction': '「{ SOURCE }」はめいれいがまちがっています。', + 'gui.smalruby3.telemetryOptIn.buttonTextYes': 'はい、スモウルビーのかいぜんにきょうりょくします。', + 'gui.smalruby3.extension.mesh.name': 'メッシュ', + 'gui.smalruby3.extension.mesh.description': 'ネットワークじょうでユーザーかんのやりとりを おこなう。', + 'gui.smalruby3.extension.mesh.connectingMessage': 'メッシュのネットワークにせつぞくしています', + 'mesh.categoryName': 'メッシュ', + 'mesh.sensorValue': '[NAME] センサーのあたい', + 'mesh.hostPeripheralName': 'メッシュのホストになる 【{ MESH_ID }】', + 'mesh.clientPeripheralName': 'メッシュにさんかする 【{ MESH_ID }】', + 'gui.smalruby3.extension.meshV2.name': 'メッシュ V2', + 'mesh.notConnected': 'メッシュにせつぞくしていません', + 'mesh.registeredHost': 'ホストとしてメッシュにとうろくしました 【{ MESH_ID }】', + 'mesh.joinedMesh': 'メッシュにさんかしました 【{ MESH_ID }】', + 'mesh.notConnectedMenu': '!せつぞくしていません', + 'mesh.registeredHostMenu': '✔【{ MESH_ID }】 ⏳️{ EXPIRES_AT }まで', + 'mesh.joinedMeshMenu': '✔【{ MESH_ID }】 ⏳️{ EXPIRES_AT }まで', + 'mesh.domain': 'ドメイン: {domain}', + 'mesh.domainNotSet': 'みせってい', + 'mesh.domainModalTitle': 'meshV2 ドメインせってい', + 'mesh.domainPlaceholder': 'ドメインめいをにゅうりょく...', + 'mesh.domainSaveButton': 'ほぞん', + 'mesh.domainCancelButton': 'キャンセル', + 'mesh.domainConnectedAlert': 'meshV2がせつぞくちゅうです。ドメインをへんかんするには、まずせつぞくをきってください。', + 'mesh.domainInvalidError': 'ドメインめいに つかえない もじが ふくまれています。', + 'mesh.domainTooLongError': 'ドメインめいが ながすぎます(さいだい256もじ)。', + 'mesh.domainDescription': 'ホストが ひょうじされない ばあいは ドメインを せっていしてください。がっこうなどの しせつの ゆうびんばんごうが さいてきです。', + 'mesh.domainExampleTitle': 'れい', + 'mesh.domainExample': '100-0014', + 'gui.smalruby3.extension.smalrubotS1.name': 'スモウルボットS1 (エス1)', + 'gui.smalruby3.extension.smalrubotS1.description': 'スモウルボットS1 (エス1) をせいぎょする。', + 'gui.smalruby3.extension.smalrubotS1.connectingMessage': 'スモウルボットS1 (エス1) にせつぞくしています。', + 'smalrubotS1.categoryName': 'スモウルボットS1 (エス1)', + 'smalrubotS1.action': '[ACTION] (M1, M2)', + 'smalrubotS1.actionAndStopAfter': '[SECS] びょう [ACTION] (M1, M2)', + 'smalrubotS1.bendArm': '[SECS] びょうでアーム (D10) を [DEGREE] どにまげる', + 'smalrubotS1.getSensorValue': '[POSITION] のセンサー', + 'smalrubotS1.turnLedOn': '[POSITION] のLED (エルイーディー) をオンにする (ひだり:A0, みぎ:A1)', + 'smalrubotS1.turnLedOff': '[POSITION] のLED (エルイーディー) をオフにする (ひだり:A0, みぎ:A1)', + 'smalrubotS1.getMotorSpeed': '[POSITION] DC (ディーシー) モーターのそくど (%) (ひだり:M1, みぎ:M2)', + 'smalrubotS1.setMotorSpeed': '[POSITION] DC (ディーシー) モーターのそくどを [SPEED] (%) にする (ひだり:M1, みぎ:M2)', + 'smalrubotS1.setArmCalibration': 'アーム (D10) を [DEGREE] どちょうせいする', + 'smalrubotS1.actionMenu.forward': 'すすめる', + 'smalrubotS1.actionMenu.backward': 'バックさせる', + 'smalrubotS1.actionMenu.turnLeft': 'ひだりにまげる', + 'smalrubotS1.actionMenu.turnRight': 'みぎにまげる', + 'smalrubotS1.positionsMenu.left': 'ひだり', + 'smalrubotS1.positionsMenu.right': 'みぎ', + 'smalrubotS1.sensorPositionsMenu.left': 'ひだり (A4)', + 'smalrubotS1.sensorPositionsMenu.right': 'みぎ (A5)', + 'smalrubotS1.sensorPositionsMenu.touch': 'タッチ (A2)', + 'smalrubotS1.sensorPositionsMenu.light': 'ひかり (A6)', + 'smalrubotS1.sensorPositionsMenu.sound': 'おと (A7)', + 'gui.smalruby3.blockDisplayModal.title': 'ブロックひょうじせってい', + 'gui.smalruby3.blockDisplayModal.selectAll': 'すべてせんたく', + 'gui.smalruby3.blockDisplayModal.selectNone': 'すべてせんたくかいじょ', + 'gui.smalruby3.blockDisplayModal.alwaysVisible': 'つねにひょうじ', + 'gui.smalruby3.blockDisplayModal.extensions': 'かくちょうきのう', + 'gui.smalruby3.blockDisplayModal.categoriesTitle': 'カテゴリ:', + 'gui.smalruby3.blockDisplayModal.alwaysVisibleTitle': 'つねにひょうじ:', + 'gui.smalruby3.blockDisplayModal.blocksSubtitle': 'ブロック', + 'gui.smalruby3.blockDisplayModal.copyUrl': 'URLのこぴー', + 'gui.smalruby3.blockDisplayModal.saveToFile': 'ふぁいるにせってい', + 'gui.menuBar.blockDisplay': 'ブロックひょうじ...', + 'gui.menuBar.learn': 'まなぶ', + 'gui.menuBar.koshienEntryForm': 'さんかもうしこみ', + + // Block Display Modal - Block Messages (Hiragana) + // Motion blocks + 'gui.smalruby3.blockDisplayModal.motion_movesteps': '(10) ほうごかす', + 'gui.smalruby3.blockDisplayModal.motion_turnright': '↻ (15) どまわす', + 'gui.smalruby3.blockDisplayModal.motion_turnleft': '↺ (15) どまわす', + 'gui.smalruby3.blockDisplayModal.motion_goto': '(どこかのばしょ▼) へいく', + 'gui.smalruby3.blockDisplayModal.motion_gotoxy': 'xざひょうを (0) 、yざひょうを (0) にする', + 'gui.smalruby3.blockDisplayModal.motion_glideto': '(1) びょうで (どこかのばしょ▼) へすべるようにいどうする', + 'gui.smalruby3.blockDisplayModal.motion_glidesecstoxy': '(1) びょうでxざひょうを (0) 、yざひょうを (0) へすべるようにいどうする', + 'gui.smalruby3.blockDisplayModal.motion_pointindirection': '(90) どにむける', + 'gui.smalruby3.blockDisplayModal.motion_pointtowards': '(マウスのポインター▼) へむける', + 'gui.smalruby3.blockDisplayModal.motion_changexby': 'xざひょうを (10) ずつかえる', + 'gui.smalruby3.blockDisplayModal.motion_setx': 'xざひょうを (0) にする', + 'gui.smalruby3.blockDisplayModal.motion_changeyby': 'yざひょうを (10) ずつかえる', + 'gui.smalruby3.blockDisplayModal.motion_sety': 'yざひょうを (0) にする', + 'gui.smalruby3.blockDisplayModal.motion_ifonedgebounce': 'もしはしについたら、はねかえる', + 'gui.smalruby3.blockDisplayModal.motion_setrotationstyle': 'かいてんほうほうを [ひだりみぎのみ▼] にする', + + // Looks blocks + 'gui.smalruby3.blockDisplayModal.looks_sayforsecs': '(こんにちは) と (2) びょういう', + 'gui.smalruby3.blockDisplayModal.looks_say': '(こんにちは) という', + 'gui.smalruby3.blockDisplayModal.looks_thinkforsecs': '(うーん...) と (2) びょうかんがえる', + 'gui.smalruby3.blockDisplayModal.looks_think': '(うーん...) とかんがえる', + 'gui.smalruby3.blockDisplayModal.looks_switchbackdropto': 'はいけいを (はいけい1) にする', + 'gui.smalruby3.blockDisplayModal.looks_switchbackdroptoandwait': '【すてーじ】はいけいを (はいけい1) にしてまつ', + 'gui.smalruby3.blockDisplayModal.looks_nextbackdrop': 'つぎのはいけいにする', + 'gui.smalruby3.blockDisplayModal.looks_switchcostumeto': 'コスチュームを (コスチューム1▼) にする', + 'gui.smalruby3.blockDisplayModal.looks_nextcostume': 'つぎのコスチュームにする', + 'gui.smalruby3.blockDisplayModal.looks_changesizeby': 'おおきさを (10) ずつかえる', + 'gui.smalruby3.blockDisplayModal.looks_setsizeto': 'おおきさを (100) %にする', + 'gui.smalruby3.blockDisplayModal.looks_changeeffectby': '[いろ▼] のこうかを (25) ずつかえる', + 'gui.smalruby3.blockDisplayModal.looks_seteffectto': '[いろ▼] のこうかを (0) にする', + 'gui.smalruby3.blockDisplayModal.looks_cleargraphiceffects': 'がぞうこうかをなくす', + 'gui.smalruby3.blockDisplayModal.looks_show': 'ひょうじする', + 'gui.smalruby3.blockDisplayModal.looks_hide': 'かくす', + 'gui.smalruby3.blockDisplayModal.looks_gotofrontback': '[さいぜんめん▼] へいどうする', + 'gui.smalruby3.blockDisplayModal.looks_goforwardbackwardlayers': '(1) そう [てまえにだす▼]', + 'gui.smalruby3.blockDisplayModal.looks_costumenumbername': 'コスチュームの [ばんごう▼]', + 'gui.smalruby3.blockDisplayModal.looks_backdropnumbername': 'はいけいの [ばんごう▼]', + 'gui.smalruby3.blockDisplayModal.looks_size': 'おおきさ', + + // Sound blocks + 'gui.smalruby3.blockDisplayModal.sound_playuntildone': 'おわるまで (Meow▼) のおとをならす', + 'gui.smalruby3.blockDisplayModal.sound_play': '(Meow▼) のおとをならす', + 'gui.smalruby3.blockDisplayModal.sound_stopallsounds': 'すべてのおとをとめる', + 'gui.smalruby3.blockDisplayModal.sound_changeeffectby': '[ピッチ▼] のこうかを (10) ずつかえる', + 'gui.smalruby3.blockDisplayModal.sound_seteffectto': '[ピッチ▼] のこうかを (100) にする', + 'gui.smalruby3.blockDisplayModal.sound_cleareffects': 'おとのこうかをなくす', + 'gui.smalruby3.blockDisplayModal.sound_changevolumeby': 'おんりょうを (-10) ずつかえる', + 'gui.smalruby3.blockDisplayModal.sound_setvolumeto': 'おんりょうを (100) %にする', + + // Event blocks + 'gui.smalruby3.blockDisplayModal.event_whenflagclicked': '🏁 がおされたとき', + 'gui.smalruby3.blockDisplayModal.event_whenkeypressed': '[スペース▼] キーがおされたとき', + 'gui.smalruby3.blockDisplayModal.event_whenthisspriteclicked': 'このスプライトがおされたとき', + 'gui.smalruby3.blockDisplayModal.event_whenbackdropswitchesto': 'はいけいが [はいけい1] になったとき', + 'gui.smalruby3.blockDisplayModal.event_whengreaterthan': '[おんりょう▼] > (10) のとき', + 'gui.smalruby3.blockDisplayModal.event_whenbroadcastreceived': '[メッセージ1▼] をうけとったとき', + 'gui.smalruby3.blockDisplayModal.event_broadcast': '(メッセージ1▼) をおくる', + 'gui.smalruby3.blockDisplayModal.event_broadcastandwait': '(メッセージ1▼) をおくってまつ', + + // Control blocks + 'gui.smalruby3.blockDisplayModal.control_wait': '(1) びょうまつ', + 'gui.smalruby3.blockDisplayModal.control_repeat': '(10) かいくりかえす', + 'gui.smalruby3.blockDisplayModal.control_forever': 'ずっと', + 'gui.smalruby3.blockDisplayModal.control_if': 'もし 〔 〕 なら', + 'gui.smalruby3.blockDisplayModal.control_if_else': 'もし 〔 〕 なら', + 'gui.smalruby3.blockDisplayModal.control_wait_until': '〔 〕 までまつ', + 'gui.smalruby3.blockDisplayModal.control_repeat_until': '〔 〕 までくりかえす', + 'gui.smalruby3.blockDisplayModal.control_stop': 'すべてをとめる', + 'gui.smalruby3.blockDisplayModal.control_start_as_clone': 'クローンされたとき', + 'gui.smalruby3.blockDisplayModal.control_create_clone_of': '(じぶんじしん▼) のクローンをつくる', + 'gui.smalruby3.blockDisplayModal.control_delete_this_clone': 'このクローンをさくじょする', + + // Sensing blocks + 'gui.smalruby3.blockDisplayModal.sensing_touchingobject': '(マウスのポインター▼) にさわった', + 'gui.smalruby3.blockDisplayModal.sensing_touchingcolor': 'いろ 🎨 にさわった', + 'gui.smalruby3.blockDisplayModal.sensing_coloristouchingcolor': 'いろ 🎨 がいろ 🎨 にさわった', + 'gui.smalruby3.blockDisplayModal.sensing_distanceto': '(マウスのポインター▼) までのきょり', + 'gui.smalruby3.blockDisplayModal.sensing_askandwait': '(あなたのなまえはなんですか?) ときいてまつ', + 'gui.smalruby3.blockDisplayModal.sensing_answer': 'こたえ', + 'gui.smalruby3.blockDisplayModal.sensing_keypressed': '(スペース▼) キーがおされた', + 'gui.smalruby3.blockDisplayModal.sensing_mousedown': 'マウスがおされた', + 'gui.smalruby3.blockDisplayModal.sensing_mousex': 'マウスのxざひょう', + 'gui.smalruby3.blockDisplayModal.sensing_mousey': 'マウスのyざひょう', + 'gui.smalruby3.blockDisplayModal.sensing_setdragmode': 'ドラッグモードを [できる▼] にする', + 'gui.smalruby3.blockDisplayModal.sensing_loudness': 'おとのおおきさ', + 'gui.smalruby3.blockDisplayModal.sensing_timer': 'タイマー', + 'gui.smalruby3.blockDisplayModal.sensing_resettimer': 'タイマーをリセット', + 'gui.smalruby3.blockDisplayModal.sensing_of': '(ステージ▼) の [はいけい#▼]', + 'gui.smalruby3.blockDisplayModal.sensing_current': 'げんざいの [ねん▼]', + 'gui.smalruby3.blockDisplayModal.sensing_dayssince2000': '2000ねんからのにっすう', + 'gui.smalruby3.blockDisplayModal.sensing_username': 'ユーザーめい', + + // Operator blocks + 'gui.smalruby3.blockDisplayModal.operator_add': '( ) + ( )', + 'gui.smalruby3.blockDisplayModal.operator_subtract': '( ) - ( )', + 'gui.smalruby3.blockDisplayModal.operator_multiply': '( ) × ( )', + 'gui.smalruby3.blockDisplayModal.operator_divide': '( ) ÷ ( )', + 'gui.smalruby3.blockDisplayModal.operator_random': '(1) から (10) までのらんすう', + 'gui.smalruby3.blockDisplayModal.operator_gt': '( ) > (50)', + 'gui.smalruby3.blockDisplayModal.operator_lt': '( ) < (50)', + 'gui.smalruby3.blockDisplayModal.operator_equals': '( ) = (50)', + 'gui.smalruby3.blockDisplayModal.operator_and': '〔 〕 かつ 〔 〕', + 'gui.smalruby3.blockDisplayModal.operator_or': '〔 〕 または 〔 〕', + 'gui.smalruby3.blockDisplayModal.operator_not': '〔 〕 ではない', + 'gui.smalruby3.blockDisplayModal.operator_join': '(りんご) と (バナナ) をつなげる', + 'gui.smalruby3.blockDisplayModal.operator_letter_of': '(りんご) の (1) ばんめのもじ', + 'gui.smalruby3.blockDisplayModal.operator_length': '(りんご) のながさ', + 'gui.smalruby3.blockDisplayModal.operator_contains': '(りんご) に (り) がふくまれる', + 'gui.smalruby3.blockDisplayModal.operator_mod': '( ) を ( ) でわったあまり', + 'gui.smalruby3.blockDisplayModal.operator_round': '( ) をししゃごにゅう', + 'gui.smalruby3.blockDisplayModal.operator_mathop': '( ) の [ぜったいち▼]', + 'gui.extensionLibrary.showAllExtensions': 'すべてのかくちょうきのうをひょうじ', + + // MicroBit More - Tilt gesture labels (override to match microbit extension) + 'mbitMore.gesturesMenu.tiltUp': 'うえにかたむいた', + 'mbitMore.gesturesMenu.tiltDown': 'したにかたむいた', + 'mbitMore.gesturesMenu.tiltLeft': 'ひだりにかたむいた', + 'mbitMore.gesturesMenu.tiltRight': 'みぎにかたむいた', + 'gui.connection.updatePeripheral.doNotDisconnect': 'アップデートちゅうはmicro:bitをはずさないでください。', + 'gui.connection.scanning.updatePeripheralPrompt': 'micro:bitをさいしんのファームウェアにアップデートしてください。', + 'gui.connection.updatePeripheral.microbitMoreUpdateSuccessful': 'MicrobitMoreのアップデートにせいこうしました!', + 'gui.connection.updatePeripheral.microbitMoreTiltToLightUp': 'micro:bitをかたむけて25このLEDをすべててんとうさせるとかんりょうです。', + 'gui.connection.scanning.updatePeripheralButton': 'アップデート', + 'gui.connection.auto-scanning.updatePeripheralButton': 'アップデート' +}; diff --git a/packages/scratch-gui/src/locales/ja.js b/packages/scratch-gui/src/locales/ja.js new file mode 100644 index 00000000000..c84548fff25 --- /dev/null +++ b/packages/scratch-gui/src/locales/ja.js @@ -0,0 +1,263 @@ +export default { + 'gui.modal.reload': '再読み込み', + 'gui.modal.stop': '中止', + 'gui.menuBar.loadFromUrl': 'Scratchから読み込む', + 'gui.menuBar.meshV2': 'メッシュ', + 'gui.menuBar.loadFromGoogleDrive': 'Google ドライブから読み込む', + 'gui.menuBar.saveToGoogleDrive': 'Googleドライブにコピーを保存...', + 'gui.menuBar.saveDirectlyToGoogleDrive': 'Googleドライブに直ちに保存', + 'gui.menuBar.savingToGoogleDrive': 'プロジェクトを保存中...', + 'gui.menuBar.savedToGoogleDrive': 'プロジェクトが保存されました。', + 'gui.menuBar.saveDirectlyButton': '直ちに保存', + 'gui.menuBar.authExpired': '認証が期限切れです。クリックして保存してください。', + 'gui.menuBar.koshien': 'スモウルビー甲子園', + 'gui.menuBar.koshienMenu': 'スモウルビー甲子園', + 'gui.menuBar.saveAI': 'AIを保存', + 'gui.menuBar.saveAIAs': 'AIに名前をつけて保存...', + 'gui.menuBar.testAI': 'AIを試す', + 'gui.menuBar.koshienEntryForm': '参加申し込み', + 'gui.menuBar.aiSaving': 'ルビーを保存中...', + 'gui.menuBar.aiSaved': 'ルビーが保存されました。', + 'gui.koshienTestModal.title': 'スモウルビー甲子園のAIを試す', + 'gui.googleDriveLoader.loadError': 'Google ドライブからプロジェクトの読み込みに失敗しました。', + 'gui.googleDriveLoader.authError': 'Google ドライブ의 認証に失敗しました。もう一度お試しください。', + 'gui.googleDriveLoader.configError': 'Google ドライブが設定されていません。管理者に連絡してください。', + 'gui.googleDriveLoader.pickerTitle': 'Google ドライブから Scratch 3.0 プロジェクト (.sb3) を選択', + 'gui.googleDriveSaver.uploadError': 'Google ドライブへのプロジェクトのアップロードに失敗しました。', + 'gui.googleDriveSaver.authError': 'Google ドライブの認証に失敗しました。もう一度お試しください。', + 'gui.googleDriveSaver.configError': 'Google ドライブが設定されていません。管理者に連絡してください。', + 'gui.googleDriveSaver.uploadSuccess': 'プロジェクトを Google ドライブに正常にアップロードしました!', + 'gui.googleDriveSaveDialog.title': 'Googleドライブにコピーを保存', + 'gui.googleDriveSaveDialog.filenameLabel': '名前を付けて保存:', + 'gui.googleDriveSaveDialog.whereLabel': 'フォルダ:', + 'gui.googleDriveSaveDialog.myDrive': 'マイドライブ', + 'gui.googleDriveSaveDialog.selectFolder': 'フォルダを選択する...', + 'gui.googleDriveSaveDialog.selectedFolder': '選択: {folderName}', + 'gui.googleDriveSaveDialog.cancel': 'キャンセル', + 'gui.googleDriveSaveDialog.reset': 'リセット', + 'gui.googleDriveSaveDialog.save': '保存', + 'gui.googleDriveSaveDialog.filenameRequired': 'ファイル名を入力してください。', + 'gui.googleDriveSaveDialog.folderPickerTitle': 'Google ドライブでフォルダを選択', + 'gui.googleDriveSaveDialog.folderPickerError': 'フォルダピッカーの表示に失敗しました。もう一度お試しください。', + 'gui.urlLoader.loadError': 'プロジェクトURLの読み込みに失敗しました。', + 'gui.urlLoader.invalidUrl': '有効なScratchプロジェクトURLまたはGoogle DriveのURLを入力してください。', + 'gui.urlLoader.title': 'Scratchから読み込む', + 'gui.urlLoader.urlPlaceholder': 'プロジェクトのURLを入力...', + 'gui.urlLoader.openButton': '開く', + 'gui.urlLoader.cancelButton': 'キャンセル', + 'gui.urlLoader.urlExamplesTitle': 'URLの例', + 'gui.urlLoader.urlExampleScratch': 'https://scratch.mit.edu/projects/1234567/', + 'gui.menuBar.seeProjectPage': 'プロジェクトページを見る', + 'gui.loader.creating': 'プロジェクトを作成中...', + 'gui.smalruby3.crashMessage.description': '申し訳ありません。スモウルビーがクラッシュしたようです。このバグは自動的にスモウルビーチームに報告されました。ページを再読み込みしてください。', + 'gui.smalruby3.gui.defaultProjectTitle': 'スモウルビーのプロジェクト', + 'gui.smalruby3.gui.rubyTab': 'ルビー', + 'gui.smalruby3.previewInfo.betawelcome': 'スモウルビー3.0 ベータ版にようこそ!', + 'gui.smalruby3.previewInfo.label': 'スモウルビー3.0を試してみる', + 'gui.smalruby3.previewInfo.invitation': '私たちは次世代のスモウルビーを開発中です。お試しください!', + 'gui.smalruby3.previewInfo.welcome': 'スモウルビー3.0 プレビュー版にようこそ!', + 'gui.smalruby3.menuBar.downloadRubyCodeToComputer': 'コンピュータにルビーを保存する', + 'gui.smalruby3.menuBar.generateRubyFromCode': 'コードからルビーに変換します', + 'gui.smalruby3.unsupportedBrowser.notRecommended': '申し訳ありません。スモウルビー3.0はお使いのバージョンのブラウザをサポートしていません。Google Chrome、Mozilla Firefox、Microsoft Edge、Apple Safariのようなサポートしている最新のバージョンにアップデートすることをお勧めします。', + 'gui.smalruby3.unsupportedBrowser.description': '申し訳ありません。スモウルビー3.0はInternet Explorer、Vivaldi、Opera、Silkをサポートしていません。Google Chrome、Mozilla Firefox、Microsoft Edgeのような新しいブラウザの利用をお勧めします。', + 'gui.smalruby3.unsupportedBrowser.previewfaq': 'スモウルビーは Scratch 3.0をベースに開発していますので、詳しく知りたい場合は Scratch の {previewFaqLink} をご覧ください。', + 'gui.smalruby3.webglModal.description': '残念ながら、ブラウザーやコンピューターが{webGlLink}ようです。この技術はスモウルビー3.0の実行に必須です。', + 'gui.smalruby3.alerts.convertRubyToBlocksError': 'ルビーからコードに変換できませんでした。ルビーを修正してください!', + 'gui.smalruby3.telemetryOptIn.label': 'スモウルビーを改善するための利用状況の報告', + 'gui.smalruby3.telemetryOptIn.body1': 'スモウルビーの開発者は世界中でスモウルビーがどのように使われているのかを理解したいと考えています。その手助けのために、みなさんのスモウルビーの利用状況をスモウルビーの開発者に提供していただけないでしょうか。', + 'gui.smalruby3.telemetryOptIn.body2': '提供していただく情報にはどの言語を選択したか、どのブロックを使ったか、保存・読み込み・プロジェクトのアップロードなどのイベントを含みます。ただし、ユーザ名などの個人的な情報は一切含みません。', + 'gui.telemetryOptIn.buttonTextNo': 'いいえ、結構です。', + 'gui.smalruby3.rubyToBlocksConverter.couldNotConvertPrimitive': '「{ SOURCE }」はブロックに変換できません。', + 'gui.smalruby3.rubyToBlocksConverter.wrongInstruction': '「{ SOURCE }」は命令がまちがっています。', + 'gui.smalruby3.telemetryOptIn.buttonTextYes': 'はい、スモウルビーの改善に協力します。', + 'gui.smalruby3.extension.mesh.name': 'メッシュ', + 'gui.smalruby3.extension.mesh.description': 'ネットワーク上でユーザー間のやりとりを行う。', + 'mesh.categoryName': 'メッシュ', + 'mesh.sensorValue': '[NAME] センサーの値', + 'mesh.hostPeripheralName': 'メッシュのホストになる 【{ MESH_ID }】', + 'mesh.clientPeripheralName': 'メッシュに参加する 【{ MESH_ID }】', + 'gui.smalruby3.extension.mesh.connectingMessage': 'メッシュのネットワークに接続しています', + 'gui.smalruby3.extension.meshV2.name': 'メッシュ V2', + 'mesh.notConnected': 'メッシュに接続していません', + 'mesh.registeredHost': 'ホストとしてメッシュに登録しました 【{ MESH_ID }】', + 'mesh.joinedMesh': 'メッシュに参加しました 【{ MESH_ID }】', + 'mesh.notConnectedMenu': '!未接続', + 'mesh.registeredHostMenu': '✔【{MESH_ID}】 ⏳️{EXPIRES_AT}まで', + 'mesh.joinedMeshMenu': '✔【{MESH_ID}】 ⏳️{EXPIRES_AT}まで', + 'mesh.domain': 'ドメイン: {domain}', + 'mesh.domainNotSet': '未設定', + 'mesh.domainModalTitle': 'meshV2 ドメイン設定', + 'mesh.domainPlaceholder': 'ドメイン名を入力...', + 'mesh.domainSaveButton': '保存', + 'mesh.domainCancelButton': 'キャンセル', + 'mesh.domainConnectedAlert': 'meshV2が接続中です。ドメインを変更するには、まず切断してください。', + 'mesh.domainInvalidError': 'ドメイン名に使用できない文字が含まれています。', + 'mesh.domainTooLongError': 'ドメイン名が長すぎます(最大256文字)。', + 'mesh.domainDescription': 'ホストが表示されない場合はドメインを設定してください。学校などの施設の郵便番号が最適です。', + 'mesh.domainExampleTitle': '例', + 'mesh.domainExample': '100-0014', + 'gui.smalruby3.extension.smalrubotS1.name': 'スモウルボットS1', + 'gui.smalruby3.extension.smalrubotS1.description': 'スモウルボットS1を制御する。', + 'gui.smalruby3.extension.smalrubotS1.connectingMessage': 'スモウルボットS1に接続しています。', + 'smalrubotS1.categoryName': 'スモウルボットS1', + 'smalrubotS1.action': '[ACTION] (M1, M2)', + 'smalrubotS1.actionAndStopAfter': '[SECS] 秒 [ACTION] (M1, M2)', + 'smalrubotS1.bendArm': '[SECS] 秒でアーム (D10) を [DEGREE] 度に曲げる', + 'smalrubotS1.getSensorValue': '[POSITION] のセンサー', + 'smalrubotS1.turnLedOn': '[POSITION] のLEDをオンにする (左:A0, 右:A1)', + 'smalrubotS1.turnLedOff': '[POSITION] のLEDをオフにする (左:A0, 右:A1)', + 'smalrubotS1.getMotorSpeed': '[POSITION] DCモーターの速度 (%) (左:M1, 右:M2)', + 'smalrubotS1.setMotorSpeed': '[POSITION] DCモーターの速度を [SPEED] (%) にする (左:M1, 右:M2)', + 'smalrubotS1.setArmCalibration': 'アーム (D10) を [DEGREE] 度調整する', + 'smalrubotS1.actionMenu.forward': '進める', + 'smalrubotS1.actionMenu.backward': 'バックさせる', + 'smalrubotS1.actionMenu.turnLeft': '左に曲げる', + 'smalrubotS1.actionMenu.turnRight': '右に曲げる', + 'smalrubotS1.actionMenu.stop': '止める', + 'smalrubotS1.positionsMenu.left': '左', + 'smalrubotS1.positionsMenu.right': '右', + 'smalrubotS1.sensorPositionsMenu.left': '左 (A4)', + 'smalruby3.sensorPositionsMenu.right': '右 (A5)', + 'smalrubotS1.sensorPositionsMenu.touch': 'タッチ (A2)', + 'smalrubotS1.sensorPositionsMenu.light': '光 (A6)', + 'smalrubotS1.sensorPositionsMenu.sound': '音 (A7)', + 'gui.smalruby3.blockDisplayModal.title': 'ブロック表示設定', + 'gui.smalruby3.blockDisplayModal.selectAll': 'すべて選択', + 'gui.smalruby3.blockDisplayModal.selectNone': 'すべて選択解除', + 'gui.smalruby3.blockDisplayModal.alwaysVisible': '常に表示', + 'gui.smalruby3.blockDisplayModal.extensions': '拡張機能', + 'gui.smalruby3.blockDisplayModal.categoriesTitle': 'カテゴリ:', + 'gui.smalruby3.blockDisplayModal.alwaysVisibleTitle': '常に表示:', + 'gui.smalruby3.blockDisplayModal.blocksSubtitle': 'ブロック', + 'gui.smalruby3.blockDisplayModal.copyUrl': 'URLのコピー', + 'gui.smalruby3.blockDisplayModal.saveToFile': 'ファイルに設定', + 'gui.menuBar.blockDisplay': 'ブロック表示...', + 'gui.menuBar.learn': '学ぶ', + + // Block Display Modal - Block Messages + // Motion blocks + 'gui.smalruby3.blockDisplayModal.motion_movesteps': '(10) 歩動かす', + 'gui.smalruby3.blockDisplayModal.motion_turnright': '↻ (15) 度回す', + 'gui.smalruby3.blockDisplayModal.motion_turnleft': '↺ (15) 度回す', + 'gui.smalruby3.blockDisplayModal.motion_goto': '(どこかの場所▼) へ行く', + 'gui.smalruby3.blockDisplayModal.motion_gotoxy': 'x座標を (0) 、y座標を (0) にする', + 'gui.smalruby3.blockDisplayModal.motion_glideto': '(1) 秒で (どこかの場所▼) へ滑るように移動する', + 'gui.smalruby3.blockDisplayModal.motion_glidesecstoxy': '(1) 秒でx座標を (0) 、y座標を (0) へ滑るように移動する', + 'gui.smalruby3.blockDisplayModal.motion_pointindirection': '(90) 度に向ける', + 'gui.smalruby3.blockDisplayModal.motion_pointtowards': '(マウスのポインター▼) へ向ける', + 'gui.smalruby3.blockDisplayModal.motion_changexby': 'x座標を (10) ずつ変える', + 'gui.smalruby3.blockDisplayModal.motion_setx': 'x座標を (0) にする', + 'gui.smalruby3.blockDisplayModal.motion_changeyby': 'y座標を (10) ずつ変える', + 'gui.smalruby3.blockDisplayModal.motion_sety': 'y座標を (0) にする', + 'gui.smalruby3.blockDisplayModal.motion_ifonedgebounce': 'もし端に着いたら、跳ね返る', + 'gui.smalruby3.blockDisplayModal.motion_setrotationstyle': '回転方法を [左右のみ▼] にする', + + // Looks blocks + 'gui.smalruby3.blockDisplayModal.looks_sayforsecs': '(こんにちは) と (2) 秒言う', + 'gui.smalruby3.blockDisplayModal.looks_say': '(こんにちは) と言う', + 'gui.smalruby3.blockDisplayModal.looks_thinkforsecs': '(うーん...) と (2) 秒考える', + 'gui.smalruby3.blockDisplayModal.looks_think': '(うーん...) と考える', + 'gui.smalruby3.blockDisplayModal.looks_switchbackdropto': '背景を (背景1) にする', + 'gui.smalruby3.blockDisplayModal.looks_switchbackdroptoandwait': '【ステージ】背景を (背景1) にして待つ', + 'gui.smalruby3.blockDisplayModal.looks_nextbackdrop': '次の背景にする', + 'gui.smalruby3.blockDisplayModal.looks_switchcostumeto': 'コスチュームを (コスチューム1▼) にする', + 'gui.smalruby3.blockDisplayModal.looks_nextcostume': '次のコスチュームにする', + 'gui.smalruby3.blockDisplayModal.looks_changesizeby': '大きさを (10) ずつ変える', + 'gui.smalruby3.blockDisplayModal.looks_setsizeto': '大きさを (100) %にする', + 'gui.smalruby3.blockDisplayModal.looks_changeeffectby': '[色▼] の効果を (25) ずつ変える', + 'gui.smalruby3.blockDisplayModal.looks_seteffectto': '[色▼] の効果を (0) にする', + 'gui.smalruby3.blockDisplayModal.looks_cleargraphiceffects': '画像効果をなくす', + 'gui.smalruby3.blockDisplayModal.looks_show': '表示する', + 'gui.smalruby3.blockDisplayModal.looks_hide': '隠す', + 'gui.smalruby3.blockDisplayModal.looks_gotofrontback': '[最前面▼] へ移動する', + 'gui.smalruby3.blockDisplayModal.looks_goforwardbackwardlayers': '(1) 層 [手前に出す▼]', + 'gui.smalruby3.blockDisplayModal.looks_costumenumbername': 'コスチュームの [番号▼]', + 'gui.smalruby3.blockDisplayModal.looks_backdropnumbername': '背景の [番号▼]', + 'gui.smalruby3.blockDisplayModal.looks_size': '大きさ', + + // Sound blocks + 'gui.smalruby3.blockDisplayModal.sound_playuntildone': '終わるまで (Meow▼) の音を鳴らす', + 'gui.smalruby3.blockDisplayModal.sound_play': '(Meow▼) の音を鳴らす', + 'gui.smalruby3.blockDisplayModal.sound_stopallsounds': 'すべての音を止める', + 'gui.smalruby3.blockDisplayModal.sound_changeeffectby': '[ピッチ▼] の効果を (10) ずつ変える', + 'gui.smalruby3.blockDisplayModal.sound_seteffectto': '[ピッチ▼] の効果を (100) にする', + 'gui.smalruby3.blockDisplayModal.sound_cleareffects': '音の効果をなくす', + 'gui.smalruby3.blockDisplayModal.sound_changevolumeby': '音量を (-10) ずつ変える', + 'gui.smalruby3.blockDisplayModal.sound_setvolumeto': '音量を (100) %にする', + + // Event blocks + 'gui.smalruby3.blockDisplayModal.event_whenflagclicked': '🏁 が押されたとき', + 'gui.smalruby3.blockDisplayModal.event_whenkeypressed': '[スペース▼] キーが押されたとき', + 'gui.smalruby3.blockDisplayModal.event_whenthisspriteclicked': 'このスプライトが押されたとき', + 'gui.smalruby3.blockDisplayModal.event_whenbackdropswitchesto': '背景が [背景1] になったとき', + 'gui.smalruby3.blockDisplayModal.event_whengreaterthan': '[音量▼] > (10) のとき', + 'gui.smalruby3.blockDisplayModal.event_whenbroadcastreceived': '[メッセージ1▼] を受け取ったとき', + 'gui.smalruby3.blockDisplayModal.event_broadcast': '(メッセージ1▼) を送る', + 'gui.smalruby3.blockDisplayModal.event_broadcastandwait': '(メッセージ1▼) を送って待つ', + + // Control blocks + 'gui.smalruby3.blockDisplayModal.control_wait': '(1) 秒待つ', + 'gui.smalruby3.blockDisplayModal.control_repeat': '(10) 回繰り返す', + 'gui.smalruby3.blockDisplayModal.control_forever': 'ずっと', + 'gui.smalruby3.blockDisplayModal.control_if': 'もし 〔 〕 なら', + 'gui.smalruby3.blockDisplayModal.control_if_else': 'もし 〔 〕 なら', + 'gui.smalruby3.blockDisplayModal.control_wait_until': '〔 〕 まで待つ', + 'gui.smalruby3.blockDisplayModal.control_repeat_until': '〔 〕 まで繰り返す', + 'gui.smalruby3.blockDisplayModal.control_stop': 'すべてを止める', + 'gui.smalruby3.blockDisplayModal.control_start_as_clone': 'クローンされたとき', + 'gui.smalruby3.blockDisplayModal.control_create_clone_of': '(自分自身▼) のクローンを作る', + 'gui.smalruby3.blockDisplayModal.control_delete_this_clone': 'このクローンを削除する', + + // Sensing blocks + 'gui.smalruby3.blockDisplayModal.sensing_touchingobject': '(マウスのポインター▼) に触れた', + 'gui.smalruby3.blockDisplayModal.sensing_touchingcolor': '色 🎨 に触れた', + 'gui.smalruby3.blockDisplayModal.sensing_coloristouchingcolor': '色 🎨 が色 🎨 に触れた', + 'gui.smalruby3.blockDisplayModal.sensing_distanceto': '(マウスのポインター▼) までの距離', + 'gui.smalruby3.blockDisplayModal.sensing_askandwait': '(あなたの名前は何ですか?) と聞いて待つ', + 'gui.smalruby3.blockDisplayModal.sensing_answer': '答え', + 'gui.smalruby3.blockDisplayModal.sensing_keypressed': '(スペース▼) キーが押された', + 'gui.smalruby3.blockDisplayModal.sensing_mousedown': 'マウスが押された', + 'gui.smalruby3.blockDisplayModal.sensing_mousex': 'マウスのx座標', + 'gui.smalruby3.blockDisplayModal.sensing_mousey': 'マウスのy座標', + 'gui.smalruby3.blockDisplayModal.sensing_setdragmode': 'ドラッグモードを [できる▼] にする', + 'gui.smalruby3.blockDisplayModal.sensing_loudness': '音の大きさ', + 'gui.smalruby3.blockDisplayModal.sensing_timer': 'タイマー', + 'gui.smalruby3.blockDisplayModal.sensing_resettimer': 'タイマーをリセット', + 'gui.smalruby3.blockDisplayModal.sensing_of': '(ステージ▼) の [背景#▼]', + 'gui.smalruby3.blockDisplayModal.sensing_current': '現在の [年▼]', + 'gui.smalruby3.blockDisplayModal.sensing_dayssince2000': '2000年からの日数', + 'gui.smalruby3.blockDisplayModal.sensing_username': 'ユーザー名', + + // Operator blocks + 'gui.smalruby3.blockDisplayModal.operator_add': '( ) + ( )', + 'gui.smalruby3.blockDisplayModal.operator_subtract': '( ) - ( )', + 'gui.smalruby3.blockDisplayModal.operator_multiply': '( ) × ( )', + 'gui.smalruby3.blockDisplayModal.operator_divide': '( ) ÷ ( )', + 'gui.smalruby3.blockDisplayModal.operator_random': '(1) から (10) までの乱数', + 'gui.smalruby3.blockDisplayModal.operator_gt': '( ) > (50)', + 'gui.smalruby3.blockDisplayModal.operator_lt': '( ) < (50)', + 'gui.smalruby3.blockDisplayModal.operator_equals': '( ) = (50)', + 'gui.smalruby3.blockDisplayModal.operator_and': '〔 〕 かつ 〔 〕', + 'gui.smalruby3.blockDisplayModal.operator_or': '〔 〕 または 〔 〕', + 'gui.smalruby3.blockDisplayModal.operator_not': '〔 〕 ではない', + 'gui.smalruby3.blockDisplayModal.operator_join': '(りんご) と (バナナ) をつなげる', + 'gui.smalruby3.blockDisplayModal.operator_letter_of': '(りんご) の (1) 番目の文字', + 'gui.smalruby3.blockDisplayModal.operator_length': '(りんご) の長さ', + 'gui.smalruby3.blockDisplayModal.operator_contains': '(りんご) に (り) が含まれる', + 'gui.smalruby3.blockDisplayModal.operator_mod': '( ) を ( ) で割った余り', + 'gui.smalruby3.blockDisplayModal.operator_round': '( ) を四捨五入', + 'gui.smalruby3.blockDisplayModal.operator_mathop': '( ) の [絶対値▼]', + 'gui.extensionLibrary.showAllExtensions': 'すべての拡張機能を表示', + + // MicroBit More - Tilt gesture labels (override to match microbit extension) + 'mbitMore.gesturesMenu.tiltUp': '上に傾いた', + 'mbitMore.gesturesMenu.tiltDown': '下に傾いた', + 'mbitMore.gesturesMenu.tiltLeft': '左に傾いた', + 'mbitMore.gesturesMenu.tiltRight': '右に傾いた', + 'gui.connection.updatePeripheral.doNotDisconnect': 'アップデート中はmicro:bitを外さないでください。', + 'gui.connection.scanning.updatePeripheralPrompt': 'micro:bitを最新のファームウェアにアップデートしてください。', + 'gui.connection.updatePeripheral.microbitMoreUpdateSuccessful': 'MicrobitMoreのアップデートに成功しました!', + 'gui.connection.updatePeripheral.microbitMoreTiltToLightUp': 'micro:bitを傾けて25個のLEDをすべて点灯させると完了です。', + 'gui.connection.scanning.updatePeripheralButton': 'アップデート', + 'gui.connection.auto-scanning.updatePeripheralButton': 'アップデート' +}; diff --git a/packages/scratch-gui/src/reducers/locales.js b/packages/scratch-gui/src/reducers/locales.js index 1ac81ba6fcc..8d9a618296a 100644 --- a/packages/scratch-gui/src/reducers/locales.js +++ b/packages/scratch-gui/src/reducers/locales.js @@ -1,5 +1,5 @@ import {isRtl} from 'scratch-l10n'; -import editorMessages from 'scratch-l10n/locales/editor-msgs'; +import editorMessages from '../locales'; const UPDATE_LOCALES = 'scratch-gui/locales/UPDATE_LOCALES'; const SELECT_LOCALE = 'scratch-gui/locales/SELECT_LOCALE'; diff --git a/packages/scratch-gui/static/pwa-icon.png b/packages/scratch-gui/static/pwa-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5c20f6d9129675d180a980742ecc86250ecae8c9 GIT binary patch literal 110739 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�P=7?jTbCabuoV*;%k@1l`D=Du`eh0BtebKYW4 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 CyhC;iV}l$5wwN$&oan_Nq%u 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

&Qlg*Qjdr%$eHEiX{T;2&;k}3>d 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 Date: Tue, 20 Jan 2026 12:27:22 +0900 Subject: [PATCH 2/3] fix(scratch-gui): fix unit tests and resolve mock conflicts - Migrate ruby-downloader.test.jsx to @testing-library/react - Resolve mock conflicts by using inline mocks - Fix lint warnings in modified files - All unit tests now pass Co-Authored-By: Gemini --- .../scratch-gui/src/lib/make-toolbox-xml.js | 235 ++++++++++++++++-- .../color-mode/default/__mocks__/index.js | 18 -- .../test/unit/components/menu-bar.test.jsx | 39 ++- .../test/unit/components/monitor.test.jsx | 37 ++- .../unit/containers/ruby-downloader.test.jsx | 46 ++-- .../test/unit/empty-block-selection.test.js | 7 +- .../test/unit/util/color-modes.test.js | 37 ++- 7 files changed, 347 insertions(+), 72 deletions(-) delete mode 100644 packages/scratch-gui/src/lib/settings/color-mode/default/__mocks__/index.js diff --git a/packages/scratch-gui/src/lib/make-toolbox-xml.js b/packages/scratch-gui/src/lib/make-toolbox-xml.js index 74faccf99c6..ef14a26aeb0 100644 --- a/packages/scratch-gui/src/lib/make-toolbox-xml.js +++ b/packages/scratch-gui/src/lib/make-toolbox-xml.js @@ -1,11 +1,15 @@ import ScratchBlocks from 'scratch-blocks'; import {defaultColors} from './settings/color-mode'; +import {CATEGORY_BLOCKS, parseHexFormatToSelectedBlocks} from './block-utils'; const categorySeparator = ''; const blockSeparator = ''; // At default scale, about 28px - +// Calculate total number of default blocks once at module load time +// Add 2 for variables_ and myBlocks_ which are not in CATEGORY_BLOCKS +const TOTAL_DEFAULT_BLOCKS = Object.values(CATEGORY_BLOCKS).reduce((total, blocks) => total + blocks.length, 0) + 2; + const motion = function (isInitialSetup, isStage, targetId, colors) { const stageSelected = ScratchBlocks.ScratchMsgs.translate( 'MOTION_STAGE_SELECTED', @@ -741,6 +745,141 @@ const myBlocks = function (isInitialSetup, isStage, targetId, colors) { const xmlOpen = ''; const xmlClose = ''; +/** + * Parses the only_blocks parameter and returns allowed block patterns + * @param {?string} onlyBlocks - The only_blocks URL parameter value + * @returns {Array.} - Array of allowed block patterns + */ +const parseOnlyBlocks = function (onlyBlocks) { + if (!onlyBlocks) return []; + + // Check if hex format (starts with '0') + if (onlyBlocks.startsWith('0') && onlyBlocks.length > 1) { + // Parse hex format and convert to allowed patterns + const selectedBlocks = parseHexFormatToSelectedBlocks(onlyBlocks); + const allowedPatterns = []; + + Object.keys(selectedBlocks).forEach(categoryId => { + const blocksInCategory = selectedBlocks[categoryId] || []; + allowedPatterns.push(...blocksInCategory); + }); + + return allowedPatterns; + } + + // Support both comma (,) and period (.) as separators (legacy format) + return onlyBlocks.split(/[,.]/) + .map(pattern => pattern.trim()) + .filter(pattern => pattern.length > 0); +}; + +/** + * Checks if a block type should be included based on only_blocks patterns + * @param {string} blockType - The block type to check + * @param {Array.} allowedPatterns - Array of allowed patterns + * @returns {boolean} - Whether the block should be included + */ +const shouldIncludeBlock = function (blockType, allowedPatterns) { + if (!allowedPatterns || allowedPatterns.length === 0) return true; + + return allowedPatterns.some(pattern => { + // Check if pattern is a category prefix (ends with underscore) + if (pattern.endsWith('_')) { + return blockType.startsWith(pattern); + } + // Otherwise, require exact match + return blockType === pattern; + }); +}; + +/** + * Hides a category completely when no blocks are selected + * @param {string} categoryXML - The XML string for a category (unused) + * @returns {string} - Empty string to hide the category + */ + +const filterAllBlocks = function (_categoryXML) { + // When no blocks are selected, return empty string to hide the entire category + return ''; +}; + +/** + * Filters block XML content based on only_blocks patterns + * @param {string} categoryXML - The category XML containing blocks + * @param {Array.} allowedPatterns - Array of allowed patterns + * @returns {string} - Filtered category XML + */ + +const filterBlocks = function (categoryXML, allowedPatterns) { + if (!allowedPatterns || allowedPatterns.length === 0) return categoryXML; + + // Extract both block and separator elements while preserving order + // Improved regex for better inline/normal block syntax matching + const inlineBlock = ']*type="[^"]+"[^>]*\\/>'; + const normalBlock = ']*type="[^"]+"[^>]*>[\\s\\S]*?<\\/block>'; + const separator = ']*\\/>'; + const elementRegex = new RegExp(`(?:${inlineBlock}|${normalBlock}|${separator})`, 'g'); + const elements = categoryXML.match(elementRegex) || []; + + const filteredElements = []; + + for (const element of elements) { + if (element.includes(' 0 && consolidatedElements[0].includes(' 0 && consolidatedElements[consolidatedElements.length - 1].includes(']*>/)[0]; + const categoryFooter = ''; + const blockContent = consolidatedElements.join('\n '); + + // Only add category separator if the original XML had separators + const hasSeparators = consolidatedElements.some(el => el.includes(' { const index = categoriesXML.findIndex(categoryInfo => categoryInfo.id === categoryId); @@ -776,32 +921,77 @@ const makeToolboxXML = function (isInitialSetup, isStage = true, targetId, categ } // return `undefined` }; - const motionXML = moveCategory('motion') || motion(isInitialSetup, isStage, targetId, colors.motion); - const looksXML = moveCategory('looks') || + + // Generate categories and apply filtering (except for variables, myBlocks, and extensions) + let motionXML = moveCategory('motion') || motion(isInitialSetup, isStage, targetId, colors.motion); + let looksXML = moveCategory('looks') || looks(isInitialSetup, isStage, targetId, costumeName, backdropName, colors.looks); - const soundXML = moveCategory('sound') || sound(isInitialSetup, isStage, targetId, soundName, colors.sounds); - const eventsXML = moveCategory('event') || events(isInitialSetup, isStage, targetId, colors.event); - const controlXML = moveCategory('control') || control(isInitialSetup, isStage, targetId, colors.control); - const sensingXML = moveCategory('sensing') || sensing(isInitialSetup, isStage, targetId, colors.sensing); - const operatorsXML = moveCategory('operators') || operators(isInitialSetup, isStage, targetId, colors.operators); + let soundXML = moveCategory('sound') || sound(isInitialSetup, isStage, targetId, soundName, colors.sounds); + let eventsXML = moveCategory('events') || events(isInitialSetup, isStage, targetId, colors.event); + let controlXML = moveCategory('control') || control(isInitialSetup, isStage, targetId, colors.control); + let sensingXML = moveCategory('sensing') || sensing(isInitialSetup, isStage, targetId, colors.sensing); + let operatorsXML = moveCategory('operators') || operators(isInitialSetup, isStage, targetId, colors.operators); + + // Variables and myBlocks are always included (exception categories) const variablesXML = moveCategory('data') || variables(isInitialSetup, isStage, targetId, colors.data); const myBlocksXML = moveCategory('procedures') || myBlocks(isInitialSetup, isStage, targetId, colors.more); - const everything = [ - xmlOpen, - motionXML, gap, - looksXML, gap, - soundXML, gap, - eventsXML, gap, - controlXML, gap, - sensingXML, gap, - operatorsXML, gap, - variablesXML, gap, - myBlocksXML - ]; + // Check if this is the default all blocks state (no filtering intended) + const isDefaultAllBlocks = allowedPatterns.length >= TOTAL_DEFAULT_BLOCKS; + // Apply filtering to core categories if only_blocks parameter is provided and not default all blocks + if (isOnlyBlocksSpecified && !isDefaultAllBlocks) { + // Special case: when allowedPatterns is empty, hide all blocks + if (allowedPatterns.length === 0) { + motionXML = filterAllBlocks(motionXML); + looksXML = filterAllBlocks(looksXML); + soundXML = filterAllBlocks(soundXML); + eventsXML = filterAllBlocks(eventsXML); + controlXML = filterAllBlocks(controlXML); + sensingXML = filterAllBlocks(sensingXML); + operatorsXML = filterAllBlocks(operatorsXML); + } else { + motionXML = filterBlocks(motionXML, allowedPatterns); + looksXML = filterBlocks(looksXML, allowedPatterns); + soundXML = filterBlocks(soundXML, allowedPatterns); + eventsXML = filterBlocks(eventsXML, allowedPatterns); + controlXML = filterBlocks(controlXML, allowedPatterns); + sensingXML = filterBlocks(sensingXML, allowedPatterns); + operatorsXML = filterBlocks(operatorsXML, allowedPatterns); + } + } + + // Build the final XML, only including non-empty categories + const everything = [xmlOpen]; + + // Helper function to add category if it has content + const addCategoryIfNotEmpty = categoryXML => { + if (categoryXML && categoryXML.trim() !== '') { + everything.push(categoryXML, gap); + } + }; + + // Add core categories (only if they have blocks after filtering) + addCategoryIfNotEmpty(motionXML); + addCategoryIfNotEmpty(looksXML); + addCategoryIfNotEmpty(soundXML); + addCategoryIfNotEmpty(eventsXML); + addCategoryIfNotEmpty(controlXML); + addCategoryIfNotEmpty(sensingXML); + addCategoryIfNotEmpty(operatorsXML); + + // Variables and myBlocks are always included (exception categories) + addCategoryIfNotEmpty(variablesXML); + addCategoryIfNotEmpty(myBlocksXML); + + // Extension categories are always included (exception categories) for (const extensionCategory of categoriesXML) { - everything.push(gap, extensionCategory.xml); + addCategoryIfNotEmpty(extensionCategory.xml); + } + + // Remove the last gap if it exists + if (everything.length > 1 && everything[everything.length - 1] === gap[0]) { + everything.pop(); } everything.push(xmlClose); @@ -809,3 +999,4 @@ const makeToolboxXML = function (isInitialSetup, isStage = true, targetId, categ }; export default makeToolboxXML; +export {filterBlocks}; diff --git a/packages/scratch-gui/src/lib/settings/color-mode/default/__mocks__/index.js b/packages/scratch-gui/src/lib/settings/color-mode/default/__mocks__/index.js deleted file mode 100644 index d3b3bc94b10..00000000000 --- a/packages/scratch-gui/src/lib/settings/color-mode/default/__mocks__/index.js +++ /dev/null @@ -1,18 +0,0 @@ -const blockColors = { - motion: { - primary: '#111111', - secondary: '#222222', - tertiary: '#333333' - }, - pen: { - primary: '#121212', - secondary: '#232323', - tertiary: '#343434' - }, - text: '#444444', - workspace: '#555555' -}; - -export { - blockColors -}; diff --git a/packages/scratch-gui/test/unit/components/menu-bar.test.jsx b/packages/scratch-gui/test/unit/components/menu-bar.test.jsx index e679b632906..cfa0843feb8 100644 --- a/packages/scratch-gui/test/unit/components/menu-bar.test.jsx +++ b/packages/scratch-gui/test/unit/components/menu-bar.test.jsx @@ -32,6 +32,42 @@ describe('MenuBar Component', () => { vm: new VM(), platform: { platform: PLATFORM.WEB + }, + targets: { + editingTarget: 'target-id' + }, + rubyCode: { + target: null, + code: '', + modified: false, + errors: [], + markers: [], + fontSize: 16 + }, + koshienFile: { + extensionLoadCounter: 0, + aiSaveStatus: {} + }, + googleDriveFile: { + isGoogleDriveFile: false + }, + meshV2: { + domain: null + }, + projectChanged: false, + projectTitle: 'Untitled' + }, + session: { + session: { + user: { + username: 'test-user', + membership_avatar_badge: null, + thumbnailUrl: '' + } + }, + permissions: { + educator: false, + student: false } } }); @@ -65,8 +101,7 @@ describe('MenuBar Component', () => { test('not clicking on About button does not call the handler', () => { const onClickAbout = jest.fn(); - const {container} = renderWithIntl(getComponent({onClickAbout})); - const button = container.querySelector('button'); + renderWithIntl(getComponent({onClickAbout})); expect(onClickAbout).toHaveBeenCalledTimes(0); }); diff --git a/packages/scratch-gui/test/unit/components/monitor.test.jsx b/packages/scratch-gui/test/unit/components/monitor.test.jsx index 853510adcc1..0ab84ae12af 100644 --- a/packages/scratch-gui/test/unit/components/monitor.test.jsx +++ b/packages/scratch-gui/test/unit/components/monitor.test.jsx @@ -3,8 +3,41 @@ import {render} from '@testing-library/react'; import Monitor from '../../../src/components/monitor/monitor'; import {DARK_MODE, DEFAULT_MODE} from '../../../src/lib/settings/color-mode'; -jest.mock('../../../src/lib/settings/color-mode/default'); -jest.mock('../../../src/lib/settings/color-mode/dark'); +jest.mock('../../../src/lib/settings/color-mode/default', () => ({ + blockColors: { + motion: { + primary: '#111111', + secondary: '#222222', + tertiary: '#333333' + }, + pen: { + primary: '#121212', + secondary: '#232323', + tertiary: '#343434' + }, + text: '#444444', + workspace: '#555555' + } +})); + +jest.mock('../../../src/lib/settings/color-mode/dark', () => ({ + blockColors: { + motion: { + primary: '#AAAAAA' + }, + pen: { + primary: '#FFFFFF', + secondary: '#EEEEEE', + tertiary: '#DDDDDD' + }, + text: '#BBBBBB' + }, + extensions: { + pen: { + blockIconURI: 'darkPenIcon' + } + } +})); describe('Monitor Component', () => { const noop = jest.fn(); diff --git a/packages/scratch-gui/test/unit/containers/ruby-downloader.test.jsx b/packages/scratch-gui/test/unit/containers/ruby-downloader.test.jsx index 9a3acc39f3b..6f9bcc1ee9b 100644 --- a/packages/scratch-gui/test/unit/containers/ruby-downloader.test.jsx +++ b/packages/scratch-gui/test/unit/containers/ruby-downloader.test.jsx @@ -1,9 +1,13 @@ import React from 'react'; -import {mount} from 'enzyme'; +import {render, fireEvent, waitFor} from '@testing-library/react'; import {Provider} from 'react-redux'; import configureStore from 'redux-mock-store'; import RubyDownloader from '../../../src/containers/ruby-downloader'; -import VM from 'scratch-vm'; +import _RubyGenerator from '../../../src/lib/ruby-generator'; + +jest.mock('../../../src/lib/ruby-generator', () => ({ + targetsToCode: jest.fn(() => 'mocked ruby code') +})); describe('RubyDownloader Container', () => { const mockStore = configureStore(); @@ -11,10 +15,13 @@ describe('RubyDownloader Container', () => { let vm; beforeEach(() => { - vm = new VM(); - vm.runtime.targets = [ - {id: 'stage', blocks: {}, isStage: true} - ]; + vm = { + runtime: { + targets: [ + {id: 'stage', blocks: {}, isStage: true} + ] + } + }; store = mockStore({ scratchGui: { koshienFile: { @@ -37,32 +44,27 @@ describe('RubyDownloader Container', () => { window.showSaveFilePicker = jest.fn(); }); - test('calls onSaveError when showSaveFilePicker rejects', (done) => { - const error = {name: 'AbortError', message: 'Abort'}; + test('calls onSaveError when showSaveFilePicker rejects', async () => { + const error = new Error('Abort'); + error.name = 'AbortError'; window.showSaveFilePicker.mockImplementation(() => Promise.reject(error)); - const onSaveError = (err) => { - try { - expect(err).toBe(error); - done(); - } catch (e) { - done.fail(e); - } - }; + const onSaveError = jest.fn(); - const wrapper = mount( + const {getByText} = render( {(className, downloadProject) => ( - + )} ); - // Mock saveRuby to avoid complex VM dependencies - wrapper.find('RubyDownloader').instance().saveRuby = jest.fn(() => new Blob(['test'], {type: 'text/plain'})); + fireEvent.click(getByText('Download')); - wrapper.find('#download-button').simulate('click'); + await waitFor(() => { + expect(onSaveError).toHaveBeenCalledWith(error); + }); }); -}); \ No newline at end of file +}); diff --git a/packages/scratch-gui/test/unit/empty-block-selection.test.js b/packages/scratch-gui/test/unit/empty-block-selection.test.js index e6a5ce7687f..183ad66af5b 100644 --- a/packages/scratch-gui/test/unit/empty-block-selection.test.js +++ b/packages/scratch-gui/test/unit/empty-block-selection.test.js @@ -1,13 +1,12 @@ /** - * @fileoverview Test for empty block selection filtering behavior + * @file Test for empty block selection filtering behavior */ import makeToolboxXML from '../../src/lib/make-toolbox-xml'; -import {defaultColors} from '../../src/lib/settings/themes'; +import {defaultColors} from '../../src/lib/settings/color-mode'; describe('Empty block selection filtering', () => { test('should show no blocks when empty allowed patterns are provided', () => { - const emptyPatterns = []; const targetId = 'testSprite'; const xml = makeToolboxXML(false, false, targetId, [], '', '', '', defaultColors, '', true); @@ -50,4 +49,4 @@ describe('Empty block selection filtering', () => { expect(xml).toContain('type="sensing_touchingobject"'); expect(xml).toContain('type="operator_add"'); }); -}); \ No newline at end of file +}); diff --git a/packages/scratch-gui/test/unit/util/color-modes.test.js b/packages/scratch-gui/test/unit/util/color-modes.test.js index ba0e315daa5..469b879241c 100644 --- a/packages/scratch-gui/test/unit/util/color-modes.test.js +++ b/packages/scratch-gui/test/unit/util/color-modes.test.js @@ -8,8 +8,41 @@ import { import {injectExtensionBlockMode, injectExtensionCategoryMode} from '../../../src/lib/settings/color-mode/blockHelpers'; import {detectColorMode, persistColorMode} from '../../../src/lib/settings/color-mode/persistence'; -jest.mock('../../../src/lib/settings/color-mode/default'); -jest.mock('../../../src/lib/settings/color-mode/dark'); +jest.mock('../../../src/lib/settings/color-mode/default', () => ({ + blockColors: { + motion: { + primary: '#111111', + secondary: '#222222', + tertiary: '#333333' + }, + pen: { + primary: '#121212', + secondary: '#232323', + tertiary: '#343434' + }, + text: '#444444', + workspace: '#555555' + } +})); + +jest.mock('../../../src/lib/settings/color-mode/dark', () => ({ + blockColors: { + motion: { + primary: '#AAAAAA' + }, + pen: { + primary: '#FFFFFF', + secondary: '#EEEEEE', + tertiary: '#DDDDDD' + }, + text: '#BBBBBB' + }, + extensions: { + pen: { + blockIconURI: 'darkPenIcon' + } + } +})); describe('color modes', () => { let serializeToString; From a9253f221370a9d470afb2e6217d1514cf67f0b0 Mon Sep 17 00:00:00 2001 From: Kouji Takao Date: Tue, 20 Jan 2026 13:15:21 +0900 Subject: [PATCH 3/3] fix(scratch-gui): restore missing webpack configurations and features - Restore missing DefinePlugin environment variables (Google Drive, Mesh v2) - Restore PWA support (Workbox, WebpackPwaManifest) - Add process polyfill for Webpack 5 compatibility - Add Google Picker API headers to devServer - Restore Origin Trials configuration - Clean up trademarked images in ComingSoon component Co-Authored-By: Gemini --- package-lock.json | 1883 ++++++++++++++++++++++-- packages/scratch-gui/package.json | 3 + packages/scratch-gui/webpack.config.js | 92 +- 3 files changed, 1848 insertions(+), 130 deletions(-) diff --git a/package-lock.json b/package-lock.json index ade38fa2e73..a2fa34bf0ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -72,6 +72,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, "node_modules/@asamuzakjp/css-color": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", @@ -5780,6 +5798,545 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jimp/bmp": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.16.13.tgz", + "integrity": "sha512-9edAxu7N2FX7vzkdl5Jo1BbACfycUtBQX+XBMcHA2bk62P8R0otgkHg798frgAk/WxQIzwxqOH6wMiCwrlAzdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13", + "bmp-js": "^0.1.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/core": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.16.13.tgz", + "integrity": "sha512-qXpA1tzTnlkTku9yqtuRtS/wVntvE6f3m3GNxdTdtmc+O+Wcg9Xo2ABPMh7Nc0AHbMKzwvwgB2JnjZmlmJEObg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "exif-parser": "^0.1.12", + "file-type": "^16.5.4", + "load-bmfont": "^1.3.1", + "mkdirp": "^0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" + } + }, + "node_modules/@jimp/core/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/@jimp/core/node_modules/file-type": { + "version": "16.5.4", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz", + "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-web-to-node-stream": "^3.0.0", + "strtok3": "^6.2.4", + "token-types": "^4.1.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/@jimp/core/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/@jimp/custom": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.16.13.tgz", + "integrity": "sha512-LTATglVUPGkPf15zX1wTMlZ0+AU7cGEGF6ekVF1crA8eHUWsGjrYTB+Ht4E3HTrCok8weQG+K01rJndCp/l4XA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.16.13" + } + }, + "node_modules/@jimp/gif": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.16.13.tgz", + "integrity": "sha512-yFAMZGv3o+YcjXilMWWwS/bv1iSqykFahFMSO169uVMtfQVfa90kt4/kDwrXNR6Q9i6VHpFiGZMlF2UnHClBvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13", + "gifwrap": "^0.9.2", + "omggif": "^1.0.9" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/jpeg": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.16.13.tgz", + "integrity": "sha512-BJHlDxzTlCqP2ThqP8J0eDrbBfod7npWCbJAcfkKqdQuFk0zBPaZ6KKaQKyKxmWJ87Z6ohANZoMKEbtvrwz1AA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13", + "jpeg-js": "^0.4.2" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-blit": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.16.13.tgz", + "integrity": "sha512-8Z1k96ZFxlhK2bgrY1JNWNwvaBeI/bciLM0yDOni2+aZwfIIiC7Y6PeWHTAvjHNjphz+XCt01WQmOYWCn0ML6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-blur": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.16.13.tgz", + "integrity": "sha512-PvLrfa8vkej3qinlebyhLpksJgCF5aiysDMSVhOZqwH5nQLLtDE9WYbnsofGw4r0VVpyw3H/ANCIzYTyCtP9Cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-circle": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.16.13.tgz", + "integrity": "sha512-RNave7EFgZrb5V5EpdvJGAEHMnDAJuwv05hKscNfIYxf0kR3KhViBTDy+MoTnMlIvaKFULfwIgaZWzyhuINMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-color": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.16.13.tgz", + "integrity": "sha512-xW+9BtEvoIkkH/Wde9ql4nAFbYLkVINhpgAE7VcBUsuuB34WUbcBl/taOuUYQrPEFQJ4jfXiAJZ2H/rvKjCVnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13", + "tinycolor2": "^1.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-contain": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.16.13.tgz", + "integrity": "sha512-QayTXw4tXMwU6q6acNTQrTTFTXpNRBe+MgTGMDU0lk+23PjlFCO/9sacflelG8lsp7vNHhAxFeHptDMAksEYzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-cover": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.16.13.tgz", + "integrity": "sha512-BSsP71GTNaqWRcvkbWuIVH+zK7b3TSNebbhDkFK0fVaUTzHuKMS/mgY4hDZIEVt7Rf5FjadAYtsujHN9w0iSYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-crop": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.16.13.tgz", + "integrity": "sha512-WEl2tPVYwzYL8OKme6Go2xqiWgKsgxlMwyHabdAU4tXaRwOCnOI7v4021gCcBb9zn/oWwguHuKHmK30Fw2Z/PA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-displace": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.16.13.tgz", + "integrity": "sha512-qt9WKq8vWrcjySa9DyQ0x/RBMHQeiVjdVSY1SJsMjssPUf0pS74qorcuAkGi89biN3YoGUgPkpqECnAWnYwgGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-dither": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.16.13.tgz", + "integrity": "sha512-5/N3yJggbWQTlGZHQYJPmQXEwR52qaXjEzkp1yRBbtdaekXE3BG/suo0fqeoV/csf8ooI78sJzYmIrxNoWVtgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-fisheye": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.13.tgz", + "integrity": "sha512-2rZmTdFbT/cF9lEZIkXCYO0TsT114Q27AX5IAo0Sju6jVQbvIk1dFUTnwLDadTo8wkJlFzGqMQ24Cs8cHWOliA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-flip": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.16.13.tgz", + "integrity": "sha512-EmcgAA74FTc5u7Z+hUO/sRjWwfPPLuOQP5O64x5g4j0T12Bd29IgsYZxoutZo/rb3579+JNa/3wsSEmyVv1EpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-rotate": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-gaussian": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.13.tgz", + "integrity": "sha512-A1XKfGQD0iDdIiKqFYi8nZMv4dDVYdxbrmgR7y/CzUHhSYdcmoljLIIsZZM3Iks/Wa353W3vtvkWLuDbQbch1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-invert": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.16.13.tgz", + "integrity": "sha512-xFMrIn7czEZbdbMzZWuaZFnlLGJDVJ82y5vlsKsXRTG2kcxRsMPXvZRWHV57nSs1YFsNqXSbrC8B98n0E32njQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-mask": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.16.13.tgz", + "integrity": "sha512-wLRYKVBXql2GAYgt6FkTnCfE+q5NomM7Dlh0oIPGAoMBWDyTx0eYutRK6PlUrRK2yMHuroAJCglICTbxqGzowQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-normalize": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.16.13.tgz", + "integrity": "sha512-3tfad0n9soRna4IfW9NzQdQ2Z3ijkmo21DREHbE6CGcMIxOSvfRdSvf1qQPApxjTSo8LTU4MCi/fidx/NZ0GqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-print": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.16.13.tgz", + "integrity": "sha512-0m6i3p01PGRkGAK9r53hDYrkyMq+tlhLOIbsSTmZyh6HLshUKlTB7eXskF5OpVd5ZUHoltlNc6R+ggvKIzxRFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13", + "load-bmfont": "^1.4.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-resize": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.16.13.tgz", + "integrity": "sha512-qoqtN8LDknm3fJm9nuPygJv30O3vGhSBD2TxrsCnhtOsxKAqVPJtFVdGd/qVuZ8nqQANQmTlfqTiK9mVWQ7MiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-rotate": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.16.13.tgz", + "integrity": "sha512-Ev+Jjmj1nHYw897z9C3R9dYsPv7S2/nxdgfFb/h8hOwK0Ovd1k/+yYS46A0uj/JCKK0pQk8wOslYBkPwdnLorw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-scale": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.16.13.tgz", + "integrity": "sha512-05POQaEJVucjTiSGMoH68ZiELc7QqpIpuQlZ2JBbhCV+WCbPFUBcGSmE7w4Jd0E2GvCho/NoMODLwgcVGQA97A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-shadow": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.16.13.tgz", + "integrity": "sha512-nmu5VSZ9hsB1JchTKhnnCY+paRBnwzSyK5fhkhtQHHoFD5ArBQ/5wU8y6tCr7k/GQhhGq1OrixsECeMjPoc8Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blur": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-threshold": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.16.13.tgz", + "integrity": "sha512-+3zArBH0OE3Rhjm4HyAokMsZlIq5gpQec33CncyoSwxtRBM2WAhUVmCUKuBo+Lr/2/4ISoY4BWpHKhMLDix6cA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-color": ">=0.8.0", + "@jimp/plugin-resize": ">=0.8.0" + } + }, + "node_modules/@jimp/plugins": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.16.13.tgz", + "integrity": "sha512-CJLdqODEhEVs4MgWCxpWL5l95sCBlkuSLz65cxEm56X5akIsn4LOlwnKoSEZioYcZUBvHhCheH67AyPTudfnQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.16.13", + "@jimp/plugin-blur": "^0.16.13", + "@jimp/plugin-circle": "^0.16.13", + "@jimp/plugin-color": "^0.16.13", + "@jimp/plugin-contain": "^0.16.13", + "@jimp/plugin-cover": "^0.16.13", + "@jimp/plugin-crop": "^0.16.13", + "@jimp/plugin-displace": "^0.16.13", + "@jimp/plugin-dither": "^0.16.13", + "@jimp/plugin-fisheye": "^0.16.13", + "@jimp/plugin-flip": "^0.16.13", + "@jimp/plugin-gaussian": "^0.16.13", + "@jimp/plugin-invert": "^0.16.13", + "@jimp/plugin-mask": "^0.16.13", + "@jimp/plugin-normalize": "^0.16.13", + "@jimp/plugin-print": "^0.16.13", + "@jimp/plugin-resize": "^0.16.13", + "@jimp/plugin-rotate": "^0.16.13", + "@jimp/plugin-scale": "^0.16.13", + "@jimp/plugin-shadow": "^0.16.13", + "@jimp/plugin-threshold": "^0.16.13", + "timm": "^1.6.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/png": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.16.13.tgz", + "integrity": "sha512-8cGqINvbWJf1G0Her9zbq9I80roEX0A+U45xFby3tDWfzn+Zz8XKDF1Nv9VUwVx0N3zpcG1RPs9hfheG4Cq2kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.13", + "pngjs": "^3.3.3" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/tiff": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.16.13.tgz", + "integrity": "sha512-oJY8d9u95SwW00VPHuCNxPap6Q1+E/xM5QThb9Hu+P6EGuu6lIeLaNBMmFZyblwFbwrH+WBOZlvIzDhi4Dm/6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "utif": "^2.0.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/types": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.16.13.tgz", + "integrity": "sha512-mC0yVNUobFDjoYLg4hoUwzMKgNlxynzwt3cDXzumGvRJ7Kb8qQGOWJQjQFo5OxmGExqzPphkirdbBF88RVLBCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.16.13", + "@jimp/gif": "^0.16.13", + "@jimp/jpeg": "^0.16.13", + "@jimp/png": "^0.16.13", + "@jimp/tiff": "^0.16.13", + "timm": "^1.6.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/utils": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.16.13.tgz", + "integrity": "sha512-VyCpkZzFTHXtKgVO35iKN0sYR10psGpV6SkcSeV4oF7eSYlR8Bl6aQLCzVeFjvESF7mxTmIiI3/XrMobVrtxDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "regenerator-runtime": "^0.13.3" + } + }, "node_modules/@jitsi/sdp-interop": { "version": "0.1.14", "resolved": "https://registry.npmjs.org/@jitsi/sdp-interop/-/sdp-interop-0.1.14.tgz", @@ -5802,6 +6359,7 @@ "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", @@ -5812,6 +6370,7 @@ "version": "0.3.31", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -5844,6 +6403,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -5853,6 +6413,7 @@ "version": "0.3.11", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -5863,6 +6424,7 @@ "version": "0.3.31", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -5873,6 +6435,7 @@ "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { @@ -7729,6 +8292,176 @@ "dev": true, "license": "MIT" }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-babel/node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-babel/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/plugin-babel/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", + "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace/node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/plugin-replace/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/plugin-replace/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/@rollup/plugin-terser": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", + "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "serialize-javascript": "^6.0.1", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-terser/node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/@rollup/pluginutils": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", @@ -11706,6 +12439,29 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, "node_modules/@tapjs/processinfo": { "version": "3.1.9", "resolved": "https://registry.npmjs.org/@tapjs/processinfo/-/processinfo-3.1.9.tgz", @@ -11936,26 +12692,6 @@ "node": ">=10" } }, - "node_modules/@testing-library/dom": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", - "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.3.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "picocolors": "1.1.1", - "pretty-format": "^27.0.2" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/@testing-library/jest-dom": { "version": "5.17.0", "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", @@ -12055,6 +12791,13 @@ "@testing-library/dom": ">=7.21.4" } }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "dev": true, + "license": "MIT" + }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -12230,6 +12973,7 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, "license": "MIT" }, "node_modules/@types/async": { @@ -12358,6 +13102,7 @@ "version": "9.6.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, "license": "MIT", "dependencies": { "@types/estree": "*", @@ -12368,6 +13113,7 @@ "version": "3.7.7", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, "license": "MIT", "dependencies": { "@types/eslint": "*", @@ -12378,6 +13124,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, "license": "MIT" }, "node_modules/@types/express": { @@ -12739,7 +13486,7 @@ "version": "18.3.7", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", - "devOptional": true, + "dev": true, "license": "MIT", "peerDependencies": { "@types/react": "^18.0.0" @@ -12755,6 +13502,13 @@ "@types/react": "*" } }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/retry": { "version": "0.12.2", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", @@ -12849,8 +13603,8 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "license": "MIT", - "optional": true + "devOptional": true, + "license": "MIT" }, "node_modules/@types/unist": { "version": "3.0.3", @@ -13375,6 +14129,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", @@ -13385,24 +14140,28 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.13.2", @@ -13414,12 +14173,14 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -13432,6 +14193,7 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" @@ -13441,6 +14203,7 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" @@ -13450,12 +14213,14 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -13472,6 +14237,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -13485,6 +14251,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -13497,6 +14264,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -13511,6 +14279,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -13589,12 +14358,14 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, "license": "Apache-2.0" }, "node_modules/abab": { @@ -13615,6 +14386,19 @@ "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -13643,6 +14427,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -13689,6 +14474,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=10.13.0" @@ -13762,6 +14548,7 @@ "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -13778,6 +14565,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, "license": "MIT", "dependencies": { "ajv": "^8.0.0" @@ -13795,6 +14583,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" @@ -13876,6 +14665,13 @@ "dev": true, "license": "MIT" }, + "node_modules/any-base": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", + "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==", + "dev": true, + "license": "MIT" + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -14168,6 +14964,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, "license": "Apache-2.0", "dependencies": { "dequal": "^2.0.3" @@ -14537,6 +15334,16 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "license": "MIT" }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -15273,6 +16080,13 @@ "dev": true, "license": "MIT" }, + "node_modules/bmp-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", + "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==", + "dev": true, + "license": "MIT" + }, "node_modules/body-parser": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", @@ -16119,6 +16933,16 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/centra": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/centra/-/centra-2.7.0.tgz", + "integrity": "sha512-PbFMgMSrmgx6uxCdm57RUos9Tc3fclMvhLSATYN39XsDV29B89zZ3KA89jmY0vwSGazyU+uerqwa6t+KaodPcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6" + } + }, "node_modules/chai": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.1.tgz", @@ -16288,6 +17112,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.0" @@ -16677,6 +17502,16 @@ "dev": true, "license": "ISC" }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -17422,6 +18257,16 @@ "node": ">=8" } }, + "node_modules/css-color-names": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", + "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/css-loader": { "version": "5.2.7", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", @@ -18275,6 +19120,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -18419,6 +19265,7 @@ "version": "0.5.16", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, "license": "MIT" }, "node_modules/dom-converter": { @@ -18692,6 +19539,22 @@ "dev": true, "license": "MIT" }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/electron-to-chromium": { "version": "1.5.267", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", @@ -18757,6 +19620,7 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -20039,6 +20903,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" @@ -20085,6 +20950,16 @@ "node": ">= 0.6" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -20141,6 +21016,12 @@ "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==", "license": "BSD-3-Clause" }, + "node_modules/exif-parser": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", + "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==", + "dev": true + }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -20514,6 +21395,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, "funding": [ { "type": "github", @@ -20752,6 +21634,39 @@ "node": ">=6" } }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/filename-reserved-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", @@ -22032,6 +22947,13 @@ "node": ">=6" } }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true, + "license": "ISC" + }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -22331,6 +23253,17 @@ "node": ">= 4.0.0" } }, + "node_modules/gifwrap": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.9.4.tgz", + "integrity": "sha512-MDMwbhASQuVeD4JKd1fKgNgCRL3fGqMM4WaqpNhWO0JiMOAjbQdumbs4BbBZEy9/M00EHEjKN3HieVhCUlwjeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "image-q": "^4.0.0", + "omggif": "^1.0.10" + } + }, "node_modules/git-log-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.1.tgz", @@ -22488,6 +23421,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, "license": "BSD-2-Clause" }, "node_modules/global": { @@ -22681,20 +23615,6 @@ "dev": true, "license": "MIT" }, - "node_modules/graphql": { - "version": "14.7.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.7.0.tgz", - "integrity": "sha512-l0xWZpoPKpppFzMfvVyFmp9vLN7w/ZZJPefUicMCepfJeQ8sMcztloGYY9DfjVPo6tIUDzU5Hw3MUbIjj9AVVA==", - "deprecated": "No longer supported; please update to a newer version. Details: https://github.com/graphql/graphql-js#version-support", - "license": "MIT", - "peer": true, - "dependencies": { - "iterall": "^1.2.2" - }, - "engines": { - "node": ">= 6.x" - } - }, "node_modules/graphql-tag": { "version": "2.12.6", "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", @@ -23522,6 +24442,13 @@ "postcss": "^8.1.0" } }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "dev": true, + "license": "ISC" + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -23595,6 +24522,23 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/image-q": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/image-q/-/image-q-4.0.0.tgz", + "integrity": "sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "16.9.1" + } + }, + "node_modules/image-q/node_modules/@types/node": { + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz", + "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==", + "dev": true, + "license": "MIT" + }, "node_modules/immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", @@ -24538,6 +25482,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true, + "license": "MIT" + }, "node_modules/is-natural-number": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", @@ -24679,6 +25630,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-retry-allowed": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", @@ -25197,13 +26158,6 @@ "node": ">= 4" } }, - "node_modules/iterall": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz", - "integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==", - "license": "MIT", - "peer": true - }, "node_modules/iterator.prototype": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", @@ -25238,6 +26192,31 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/jake": { + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, "node_modules/java-properties": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", @@ -26893,6 +27872,27 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jimp": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.16.1.tgz", + "integrity": "sha512-+EKVxbR36Td7Hfd23wKGIeEyHbxShZDX6L8uJkgVW3ESA9GiTEPK08tG1XI2r/0w5Ch0HyJF5kPqF9K7EmGjaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.16.1", + "@jimp/plugins": "^0.16.1", + "@jimp/types": "^0.16.1", + "regenerator-runtime": "^0.13.3" + } + }, + "node_modules/jpeg-js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", + "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/js-base64": { "version": "2.6.4", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", @@ -27127,6 +28127,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify": { @@ -27207,6 +28208,16 @@ ], "license": "MIT" }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", @@ -27725,6 +28736,50 @@ "uc.micro": "^1.0.1" } }, + "node_modules/load-bmfont": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.2.tgz", + "integrity": "sha512-qElWkmjW9Oq1F9EI5Gt7aD9zcdHb9spJCW1L/dmPf7KzCCEJxq8nhHz5eCgI9aMf7vrG/wyaCqdsI+Iy9ZTlog==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^3.7.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + } + }, + "node_modules/load-bmfont/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-bmfont/node_modules/phin": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/phin/-/phin-3.7.1.tgz", + "integrity": "sha512-GEazpTWwTZaEQ9RhL7Nyz0WwqilbqgLahDM3D0hxWwmVDI52nXEybHqiN6/elwpkJBhcuj+WbBu+QfT0uhPGfQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "centra": "^2.7.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -27779,6 +28834,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.11.5" @@ -28086,6 +29142,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, "license": "MIT", "bin": { "lz-string": "bin/bin.js" @@ -28934,6 +29991,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, "license": "MIT" }, "node_modules/merge2": { @@ -30009,40 +31067,6 @@ "node": ">=0.10.0" } }, - "node_modules/monaco-editor": { - "version": "0.55.1", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.55.1.tgz", - "integrity": "sha512-jz4x+TJNFHwHtwuV9vA9rMujcZRb0CEilTEwG2rRSpe/A7Jdkuj8xPKttCgOh+v/lkHy7HsZ64oj+q3xoAFl9A==", - "license": "MIT", - "peer": true, - "dependencies": { - "dompurify": "3.2.7", - "marked": "14.0.0" - } - }, - "node_modules/monaco-editor/node_modules/dompurify": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.7.tgz", - "integrity": "sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==", - "license": "(MPL-2.0 OR Apache-2.0)", - "peer": true, - "optionalDependencies": { - "@types/trusted-types": "^2.0.7" - } - }, - "node_modules/monaco-editor/node_modules/marked": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-14.0.0.tgz", - "integrity": "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==", - "license": "MIT", - "peer": true, - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -30118,6 +31142,7 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, "license": "MIT" }, "node_modules/nerf-dart": { @@ -34342,6 +35367,45 @@ "node": ">=6" } }, + "node_modules/parse-bmfont-ascii": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", + "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-bmfont-binary": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", + "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-bmfont-xml": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.6.tgz", + "integrity": "sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.5.0" + } + }, + "node_modules/parse-bmfont-xml/node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/parse-color": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-color/-/parse-color-1.0.0.tgz", @@ -34592,6 +35656,20 @@ "dev": true, "license": "MIT" }, + "node_modules/peek-readable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", + "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -34604,6 +35682,14 @@ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "license": "MIT" }, + "node_modules/phin": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", + "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -34662,6 +35748,19 @@ "node": ">= 6" } }, + "node_modules/pixelmatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", + "integrity": "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==", + "dev": true, + "license": "ISC", + "dependencies": { + "pngjs": "^3.0.0" + }, + "bin": { + "pixelmatch": "bin/pixelmatch" + } + }, "node_modules/pkg-conf": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", @@ -35282,6 +36381,19 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/pretty-error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", @@ -35297,6 +36409,7 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1", @@ -35311,6 +36424,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -35923,6 +37037,7 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" @@ -35931,20 +37046,6 @@ "node": ">=0.10.0" } }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "license": "MIT", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, "node_modules/react-draggable": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-3.3.2.tgz", @@ -36015,24 +37116,6 @@ } } }, - "node_modules/react-intl-redux": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/react-intl-redux/-/react-intl-redux-2.4.1.tgz", - "integrity": "sha512-EYTNmHJTnTam4phQj1nTdJvcdVjz+F56nLl6JtpqWsKzG5ZnQh/hoqLLJUjP0dgeNKSESIcjhYsTyBWDUwjo0A==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.17.9", - "prop-types": "^15.8.1" - }, - "peerDependencies": { - "@babel/runtime": "^7.17.9", - "prop-types": "^15.8.1", - "react": "^16.12.0 || ^17.0.2 || ^18.0.0", - "react-intl": "^2.2.2 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", - "react-redux": "^5.0.1 || ^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, "node_modules/react-intl/node_modules/@formatjs/ecma402-abstract": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.2.4.tgz", @@ -36087,6 +37170,7 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, "license": "MIT" }, "node_modules/react-lifecycles-compat": { @@ -36632,6 +37716,40 @@ "node": ">= 6" } }, + "node_modules/readable-web-to-node-stream": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.4.tgz", + "integrity": "sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "^4.7.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/readable-web-to-node-stream/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "dev": true, + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -36682,16 +37800,6 @@ "esprima": "~4.0.0" } }, - "node_modules/redux": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", - "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.9.2" - } - }, "node_modules/redux-mock-store": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/redux-mock-store/-/redux-mock-store-1.5.5.tgz", @@ -37102,6 +38210,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -37365,6 +38474,22 @@ "@rolldown/binding-win32-x64-msvc": "1.0.0-beta.53" } }, + "node_modules/rollup": { + "version": "2.79.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", + "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/rrweb-cssom": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", @@ -37542,6 +38667,7 @@ "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" @@ -37551,6 +38677,7 @@ "version": "4.3.3", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "dev": true, "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", @@ -38792,6 +39919,13 @@ "npm": ">= 3.0.0" } }, + "node_modules/smob": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz", + "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==", + "dev": true, + "license": "MIT" + }, "node_modules/socket.io-client": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.5.0.tgz", @@ -38959,6 +40093,14 @@ "source-map": "^0.6.0" } }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true, + "license": "MIT" + }, "node_modules/spawn-error-forwarder": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", @@ -39644,6 +40786,31 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stringify-object/node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -39680,6 +40847,16 @@ "node": ">=8" } }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/strip-dirs": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", @@ -39768,6 +40945,24 @@ ], "license": "MIT" }, + "node_modules/strtok3": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", + "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^4.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, "node_modules/style-loader": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz", @@ -41043,6 +42238,7 @@ "version": "5.44.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.1.tgz", "integrity": "sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -41061,6 +42257,7 @@ "version": "5.3.16", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", @@ -41095,6 +42292,7 @@ "version": "0.3.31", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -41105,6 +42303,7 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", @@ -41119,6 +42318,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" @@ -41128,6 +42328,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -41143,12 +42344,14 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, "license": "MIT" }, "node_modules/terser/node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", @@ -41243,6 +42446,13 @@ "node": ">=0.10.0" } }, + "node_modules/timm": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", + "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==", + "dev": true, + "license": "MIT" + }, "node_modules/tiny-inflate": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", @@ -41256,6 +42466,13 @@ "dev": true, "license": "MIT" }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", + "dev": true, + "license": "MIT" + }, "node_modules/tinyexec": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", @@ -41426,6 +42643,24 @@ "node": ">=0.6" } }, + "node_modules/token-types": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz", + "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, "node_modules/tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -42410,7 +43645,7 @@ "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -42818,6 +44053,17 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, "node_modules/update-browserslist-db": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", @@ -43087,6 +44333,16 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, + "node_modules/utif": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", + "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pako": "^1.0.5" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -43471,6 +44727,7 @@ "version": "2.4.4", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", + "dev": true, "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", @@ -43520,6 +44777,7 @@ "version": "5.104.1", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.1.tgz", "integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==", + "dev": true, "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.7", @@ -43788,6 +45046,34 @@ "node": ">=6" } }, + "node_modules/webpack-pwa-manifest": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/webpack-pwa-manifest/-/webpack-pwa-manifest-4.3.0.tgz", + "integrity": "sha512-3hK8Qg58SyLCUIz4PBYnfUPM6iJ5K88h8Uhc3MxmlJcVtDF/11aBBdUTdQkqc9bo6Cb8Q1v2xdsB2XO6pzTbiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-color-names": "1.0.1", + "jimp": "0.16.1", + "mime": "2.4.6" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/webpack-pwa-manifest/node_modules/mime": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/webpack-sources": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", @@ -43809,6 +45095,7 @@ "version": "5.18.4", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz", "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==", + "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", @@ -43822,12 +45109,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "dev": true, "license": "MIT" }, "node_modules/webpack/node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", @@ -43841,6 +45130,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -43850,6 +45140,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -43863,6 +45154,7 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", + "dev": true, "license": "MIT", "engines": { "node": ">=10.13.0" @@ -44140,6 +45432,345 @@ "dev": true, "license": "MIT" }, + "node_modules/workbox-background-sync": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-7.4.0.tgz", + "integrity": "sha512-8CB9OxKAgKZKyNMwfGZ1XESx89GryWTfI+V5yEj8sHjFH8MFelUwYXEyldEK6M6oKMmn807GoJFUEA1sC4XS9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.4.0" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-7.4.0.tgz", + "integrity": "sha512-+eZQwoktlvo62cI0b+QBr40v5XjighxPq3Fzo9AWMiAosmpG5gxRHgTbGGhaJv/q/MFVxwFNGh/UwHZ/8K88lA==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.0" + } + }, + "node_modules/workbox-build": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-7.4.0.tgz", + "integrity": "sha512-Ntk1pWb0caOFIvwz/hfgrov/OJ45wPEhI5PbTywQcYjyZiVhT3UrwwUPl6TRYbTm4moaFYithYnl1lvZ8UjxcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.24.4", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-replace": "^2.4.1", + "@rollup/plugin-terser": "^0.4.3", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^11.0.1", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.79.2", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "7.4.0", + "workbox-broadcast-update": "7.4.0", + "workbox-cacheable-response": "7.4.0", + "workbox-core": "7.4.0", + "workbox-expiration": "7.4.0", + "workbox-google-analytics": "7.4.0", + "workbox-navigation-preload": "7.4.0", + "workbox-precaching": "7.4.0", + "workbox-range-requests": "7.4.0", + "workbox-recipes": "7.4.0", + "workbox-routing": "7.4.0", + "workbox-strategies": "7.4.0", + "workbox-streams": "7.4.0", + "workbox-sw": "7.4.0", + "workbox-window": "7.4.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/workbox-build/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/workbox-build/node_modules/glob": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/workbox-build/node_modules/minimatch": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/workbox-build/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "deprecated": "The work that was done in this beta branch won't be included in future versions", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/workbox-build/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-7.4.0.tgz", + "integrity": "sha512-0Fb8795zg/x23ISFkAc7lbWes6vbw34DGFIMw31cwuHPgDEC/5EYm6m/ZkylLX0EnEbbOyOCLjKgFS/Z5g0HeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.0" + } + }, + "node_modules/workbox-core": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-7.4.0.tgz", + "integrity": "sha512-6BMfd8tYEnN4baG4emG9U0hdXM4gGuDU3ectXuVHnj71vwxTFI7WOpQJC4siTOlVtGqCUtj0ZQNsrvi6kZZTAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/workbox-expiration": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-7.4.0.tgz", + "integrity": "sha512-V50p4BxYhtA80eOvulu8xVfPBgZbkxJ1Jr8UUn0rvqjGhLDqKNtfrDfjJKnLz2U8fO2xGQJTx/SKXNTzHOjnHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.4.0" + } + }, + "node_modules/workbox-google-analytics": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-7.4.0.tgz", + "integrity": "sha512-MVPXQslRF6YHkzGoFw1A4GIB8GrKym/A5+jYDUSL+AeJw4ytQGrozYdiZqUW1TPQHW8isBCBtyFJergUXyNoWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-background-sync": "7.4.0", + "workbox-core": "7.4.0", + "workbox-routing": "7.4.0", + "workbox-strategies": "7.4.0" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-7.4.0.tgz", + "integrity": "sha512-etzftSgdQfjMcfPgbfaZCfM2QuR1P+4o8uCA2s4rf3chtKTq/Om7g/qvEOcZkG6v7JZOSOxVYQiOu6PbAZgU6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.0" + } + }, + "node_modules/workbox-precaching": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-7.4.0.tgz", + "integrity": "sha512-VQs37T6jDqf1rTxUJZXRl3yjZMf5JX/vDPhmx2CPgDDKXATzEoqyRqhYnRoxl6Kr0rqaQlp32i9rtG5zTzIlNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.0", + "workbox-routing": "7.4.0", + "workbox-strategies": "7.4.0" + } + }, + "node_modules/workbox-range-requests": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-7.4.0.tgz", + "integrity": "sha512-3Vq854ZNuP6Y0KZOQWLaLC9FfM7ZaE+iuQl4VhADXybwzr4z/sMmnLgTeUZLq5PaDlcJBxYXQ3U91V7dwAIfvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.0" + } + }, + "node_modules/workbox-recipes": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-7.4.0.tgz", + "integrity": "sha512-kOkWvsAn4H8GvAkwfJTbwINdv4voFoiE9hbezgB1sb/0NLyTG4rE7l6LvS8lLk5QIRIto+DjXLuAuG3Vmt3cxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-cacheable-response": "7.4.0", + "workbox-core": "7.4.0", + "workbox-expiration": "7.4.0", + "workbox-precaching": "7.4.0", + "workbox-routing": "7.4.0", + "workbox-strategies": "7.4.0" + } + }, + "node_modules/workbox-routing": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-7.4.0.tgz", + "integrity": "sha512-C/ooj5uBWYAhAqwmU8HYQJdOjjDKBp9MzTQ+otpMmd+q0eF59K+NuXUek34wbL0RFrIXe/KKT+tUWcZcBqxbHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.0" + } + }, + "node_modules/workbox-strategies": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-7.4.0.tgz", + "integrity": "sha512-T4hVqIi5A4mHi92+5EppMX3cLaVywDp8nsyUgJhOZxcfSV/eQofcOA6/EMo5rnTNmNTpw0rUgjAI6LaVullPpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.0" + } + }, + "node_modules/workbox-streams": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-7.4.0.tgz", + "integrity": "sha512-QHPBQrey7hQbnTs5GrEVoWz7RhHJXnPT+12qqWM378orDMo5VMJLCkCM1cnCk+8Eq92lccx/VgRZ7WAzZWbSLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.0", + "workbox-routing": "7.4.0" + } + }, + "node_modules/workbox-sw": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-7.4.0.tgz", + "integrity": "sha512-ltU+Kr3qWR6BtbdlMnCjobZKzeV1hN+S6UvDywBrwM19TTyqA03X66dzw1tEIdJvQ4lYKkBFox6IAEhoSEZ8Xw==", + "dev": true, + "license": "MIT" + }, + "node_modules/workbox-webpack-plugin": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-7.4.0.tgz", + "integrity": "sha512-NRgx4lYe4JP5I8qqiROmngbc38WyyN3BZh48lUir2XYJ63EuHWN0KpDxgcYQ/fJtQQIBoswwUPmpqwQmaupnxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "7.4.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.91.0" + } + }, + "node_modules/workbox-window": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-7.4.0.tgz", + "integrity": "sha512-/bIYdBLAVsNR3v7gYGaV4pQW3M3kEPx5E8vDxGvxo6khTrGtSSCS7QiFKv9ogzBgZiy0OXLP9zO28U/1nF1mfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "7.4.0" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -44274,6 +45905,13 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/xml-parse-from-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", + "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==", + "dev": true, + "license": "MIT" + }, "node_modules/xml2js": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", @@ -44630,6 +46268,7 @@ "jest-junit": "7.0.0", "mkdirp": "1.0.4", "opal-loader": "^0.0.1", + "process": "^0.11.10", "raf": "3.4.1", "react-test-renderer": "18.3.1", "redux-mock-store": "1.5.5", @@ -44647,6 +46286,8 @@ "webpack": "5.104.1", "webpack-cli": "5.1.4", "webpack-dev-server": "5.2.3", + "webpack-pwa-manifest": "^4.3.0", + "workbox-webpack-plugin": "^7.4.0", "yauzl": "^3.2.0" }, "peerDependencies": { diff --git a/packages/scratch-gui/package.json b/packages/scratch-gui/package.json index a55aaf962d5..9f5cdfc0217 100644 --- a/packages/scratch-gui/package.json +++ b/packages/scratch-gui/package.json @@ -169,6 +169,7 @@ "jest-junit": "7.0.0", "mkdirp": "1.0.4", "opal-loader": "^0.0.1", + "process": "^0.11.10", "raf": "3.4.1", "react-test-renderer": "18.3.1", "redux-mock-store": "1.5.5", @@ -186,6 +187,8 @@ "webpack": "5.104.1", "webpack-cli": "5.1.4", "webpack-dev-server": "5.2.3", + "webpack-pwa-manifest": "^4.3.0", + "workbox-webpack-plugin": "^7.4.0", "yauzl": "^3.2.0" }, "jest": { diff --git a/packages/scratch-gui/webpack.config.js b/packages/scratch-gui/webpack.config.js index 478cdd4b989..b00966cbc7f 100644 --- a/packages/scratch-gui/webpack.config.js +++ b/packages/scratch-gui/webpack.config.js @@ -1,9 +1,13 @@ const path = require('path'); const webpack = require('webpack'); +const fs = require('fs'); // Plugins const CopyWebpackPlugin = require('copy-webpack-plugin'); const HtmlWebpackPlugin = require('html-webpack-plugin'); +const WorkboxPlugin = require('workbox-webpack-plugin'); +const WebpackPwaManifest = require('webpack-pwa-manifest'); +const assetsManifest = require('./src/assetsManifest.json'); const ScratchWebpackConfigBuilder = require('scratch-webpack-configuration'); @@ -51,7 +55,8 @@ const baseConfig = new ScratchWebpackConfigBuilder( resolve: { fallback: { Buffer: require.resolve('buffer/'), - stream: require.resolve('stream-browserify') + stream: require.resolve('stream-browserify'), + process: require.resolve('process/browser') }, alias: { 'opal': path.resolve(__dirname, 'opal/opal.min.js'), @@ -59,6 +64,9 @@ const baseConfig = new ScratchWebpackConfigBuilder( } } }) + .addPlugin(new webpack.ProvidePlugin({ + process: 'process/browser' + })) .addModuleRule({ test: /\.mjs$/, include: /node_modules/, @@ -85,7 +93,15 @@ const baseConfig = new ScratchWebpackConfigBuilder( 'process.env.DEBUG': Boolean(process.env.DEBUG), 'process.env.GA_ID': `"${process.env.GA_ID || 'UA-000000-01'}"`, 'process.env.GTM_ENV_AUTH': `"${process.env.GTM_ENV_AUTH || ''}"`, - 'process.env.GTM_ID': process.env.GTM_ID ? `"${process.env.GTM_ID}"` : null + 'process.env.GTM_ID': process.env.GTM_ID ? `"${process.env.GTM_ID}"` : null, + 'process.env.GOOGLE_CLIENT_ID': `"${process.env.GOOGLE_CLIENT_ID || ''}"`, + 'process.env.GOOGLE_API_KEY': `"${process.env.GOOGLE_API_KEY || ''}"`, + 'process.env.MESH_GRAPHQL_ENDPOINT': `"${process.env.MESH_GRAPHQL_ENDPOINT || ''}"`, + 'process.env.MESH_API_KEY': `"${process.env.MESH_API_KEY || ''}"`, + 'process.env.MESH_AWS_REGION': `"${process.env.MESH_AWS_REGION || ''}"`, + 'process.env.MESH_DATA_UPDATE_INTERVAL_MS': `"${process.env.MESH_DATA_UPDATE_INTERVAL_MS || ''}"`, + 'process.env.MESH_EVENT_BATCH_INTERVAL_MS': `"${process.env.MESH_EVENT_BATCH_INTERVAL_MS || ''}"`, + 'process.env.MESH_PERIODIC_DATA_SYNC_INTERVAL_MS': `"${process.env.MESH_PERIODIC_DATA_SYNC_INTERVAL_MS || ''}"` })) .addPlugin(new CopyWebpackPlugin({ patterns: [ @@ -194,35 +210,45 @@ const buildConfig = baseConfig.clone() ...commonHtmlWebpackPluginOptions, chunks: ['gui'], template: 'src/playground/index.ejs', - title: 'Scratch 3.0 GUI' + title: 'Scratch 3.0 GUI', + originTrials: JSON.parse(fs.readFileSync('origin-trials.json')), + pwa: process.env.NODE_ENV === 'production' })) .addPlugin(new HtmlWebpackPlugin({ ...commonHtmlWebpackPluginOptions, chunks: ['guistandalone'], filename: 'standalone.html', template: 'src/playground/index.ejs', - title: 'Scratch 3.0 GUI: Standalone Mode' + title: 'Scratch 3.0 GUI: Standalone Mode', + originTrials: JSON.parse(fs.readFileSync('origin-trials.json')), + pwa: process.env.NODE_ENV === 'production' })) .addPlugin(new HtmlWebpackPlugin({ ...commonHtmlWebpackPluginOptions, chunks: ['blocksonly'], filename: 'blocks-only.html', template: 'src/playground/index.ejs', - title: 'Scratch 3.0 GUI: Blocks Only Example' + title: 'Scratch 3.0 GUI: Blocks Only Example', + originTrials: JSON.parse(fs.readFileSync('origin-trials.json')), + pwa: process.env.NODE_ENV === 'production' })) .addPlugin(new HtmlWebpackPlugin({ ...commonHtmlWebpackPluginOptions, chunks: ['compatibilitytesting'], filename: 'compatibility-testing.html', template: 'src/playground/index.ejs', - title: 'Scratch 3.0 GUI: Compatibility Testing' + title: 'Scratch 3.0 GUI: Compatibility Testing', + originTrials: JSON.parse(fs.readFileSync('origin-trials.json')), + pwa: process.env.NODE_ENV === 'production' })) .addPlugin(new HtmlWebpackPlugin({ ...commonHtmlWebpackPluginOptions, chunks: ['player'], filename: 'player.html', template: 'src/playground/index.ejs', - title: 'Scratch 3.0 GUI: Player Example' + title: 'Scratch 3.0 GUI: Player Example', + originTrials: JSON.parse(fs.readFileSync('origin-trials.json')), + pwa: process.env.NODE_ENV === 'production' })) .addPlugin(new CopyWebpackPlugin({ patterns: [ @@ -238,6 +264,42 @@ const buildConfig = baseConfig.clone() ] })); +const buildWithPwaConfig = buildConfig.clone() + .addPlugin( + new WorkboxPlugin.GenerateSW({ + disableDevLogs: !process.env.DEBUG, + clientsClaim: true, + skipWaiting: true, + additionalManifestEntries: assetsManifest, + exclude: [ + /\.DS_Store/ + ], + maximumFileSizeToCacheInBytes: 32 * 1024 * 1024 + }) + ) + .addPlugin( + new WebpackPwaManifest({ + publicPath: './', + name: 'Smalruby', + short_name: 'Smalruby', + description: 'GraphicaL User Interface for creating and running Smalruby 3.0 projects', + background_color: '#ffffff', + orientation: 'any', + crossorigin: 'use-credentials', + inject: true, + ios: { + 'apple-mobile-web-app-title': 'Smalruby', + 'apple-mobile-web-app-status-bar-style': 'default' + }, + icons: [ + { + src: path.resolve('static/pwa-icon.png'), + sizes: [96, 128, 192, 256, 384, 512] // multiple sizes + } + ] + }) + ); + // Skip building `dist/` unless explicitly requested // It roughly doubles build time and isn't needed for `scratch-gui` development // If you need non-production `dist/` for local dev, such as for `scratch-www` work, you can run something like: @@ -248,7 +310,19 @@ let config; switch (process.env.BUILD_TYPE) { case 'dist': config = distConfig.get(); break; case 'dist-standalone': config = distStandaloneConfig.get(); break; -default: config = buildConfig.get(); break; +default: config = buildWithPwaConfig.get(); break; +} + +const finalConfig = buildDist ? config : buildWithPwaConfig.get(); + +// Override devServer headers to allow Google Picker API to work +// Must be done after .get() to ensure it's not overridden by ScratchWebpackConfigBuilder +if (!buildDist && finalConfig.devServer) { + finalConfig.devServer.headers = { + ...finalConfig.devServer.headers, + 'Cross-Origin-Opener-Policy': 'unsafe-none', + 'Cross-Origin-Embedder-Policy': 'unsafe-none' + }; } -module.exports = buildDist ? config : buildConfig.get(); +module.exports = finalConfig;