diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz index 6e0b43f2..00cf1a98 100644 Binary files a/.yarn/install-state.gz and b/.yarn/install-state.gz differ diff --git a/crates/controller/src/container/executor.rs b/crates/controller/src/container/executor.rs index c2ff0d44..d4769c94 100644 --- a/crates/controller/src/container/executor.rs +++ b/crates/controller/src/container/executor.rs @@ -3,7 +3,11 @@ use logisheets_base::{ SheetId, TextId, }; -use crate::{cell::Cell, edit_action::EditPayload, Error}; +use crate::{ + cell::Cell, + edit_action::{EditPayload, StyleUpdateType}, + Error, +}; use super::{ctx::ContainerExecCtx, DataContainer}; @@ -284,7 +288,7 @@ impl ContainerExecutor { } Ok((self, true)) } - EditPayload::StyleUpdate(style_update) => { + EditPayload::CellStyleUpdate(style_update) => { let sheet_id = ctx .fetch_sheet_id_by_index(style_update.sheet_idx) .map_err(|l| BasicError::SheetIdxExceed(l))?; @@ -305,6 +309,25 @@ impl ContainerExecutor { } Ok((self, true)) } + EditPayload::LineStyleUpdate(s) => { + let sheet_id = ctx + .fetch_sheet_id_by_index(s.sheet_idx) + .map_err(|l| BasicError::SheetIdxExceed(l))?; + for i in s.from..=s.to { + if s.row { + let row_id = ctx.fetch_row_id(&sheet_id, i)?; + let row = self.container.get_row_info_mut(sheet_id, row_id); + let new_id = ctx.get_new_style_id(row.style, s.ty.clone())?; + row.style = new_id; + } else { + let col_id = ctx.fetch_col_id(&sheet_id, i)?; + let col = self.container.get_col_info_mut(sheet_id, col_id); + let new_id = ctx.get_new_style_id(col.style, s.ty.clone())?; + col.style = new_id; + } + } + Ok((self, true)) + } _ => Ok((self, false)), } } diff --git a/crates/controller/src/edit_action/mod.rs b/crates/controller/src/edit_action/mod.rs index a43256a1..2d03009f 100644 --- a/crates/controller/src/edit_action/mod.rs +++ b/crates/controller/src/edit_action/mod.rs @@ -88,7 +88,8 @@ pub enum EditPayload { CreateBlock(CreateBlock), // Style - StyleUpdate(StyleUpdate), + CellStyleUpdate(CellStyleUpdate), + LineStyleUpdate(LineStyleUpdate), BlockStyleUpdate(BlockStyleUpdate), CellInput(CellInput), @@ -454,15 +455,28 @@ use logisheets_workbook::prelude::*; #[derive(Debug, Clone)] #[cfg_attr( feature = "gents", - gents_derives::gents_header(file_name = "style_update.ts") + gents_derives::gents_header(file_name = "cell_style_update.ts") )] -pub struct StyleUpdate { +pub struct CellStyleUpdate { pub sheet_idx: usize, pub row: usize, pub col: usize, pub ty: StyleUpdateType, } +#[derive(Debug, Clone)] +#[cfg_attr( + feature = "gents", + gents_derives::gents_header(file_name = "line_style_update.ts") +)] +pub struct LineStyleUpdate { + pub sheet_idx: usize, + pub from: usize, + pub to: usize, + pub ty: StyleUpdateType, + pub row: bool, +} + pub type Color = String; #[derive(Debug, Clone)] @@ -540,11 +554,17 @@ impl From for EditPayload { EditPayload::SheetRename(value) } } -impl From for EditPayload { - fn from(value: StyleUpdate) -> Self { - EditPayload::StyleUpdate(value) +impl From for EditPayload { + fn from(value: CellStyleUpdate) -> Self { + EditPayload::CellStyleUpdate(value) } } +impl From for EditPayload { + fn from(value: LineStyleUpdate) -> Self { + EditPayload::LineStyleUpdate(value) + } +} + impl From for EditPayload { fn from(value: InsertCols) -> Self { EditPayload::InsertCols(value) @@ -613,7 +633,8 @@ impl Payload for SetVisible {} impl Payload for SheetRename {} impl Payload for CreateSheet {} impl Payload for DeleteSheet {} -impl Payload for StyleUpdate {} +impl Payload for CellStyleUpdate {} +impl Payload for LineStyleUpdate {} impl Payload for InsertCols {} impl Payload for InsertRows {} impl Payload for DeleteCols {} diff --git a/crates/controller/src/version_manager/diff.rs b/crates/controller/src/version_manager/diff.rs index 3cb583eb..795dab8e 100644 --- a/crates/controller/src/version_manager/diff.rs +++ b/crates/controller/src/version_manager/diff.rs @@ -103,7 +103,7 @@ fn convert_diff( .map_err(|l| BasicError::SheetIdxExceed(l))?; Ok(Some((Diff::Unavailable, sheet_id))) } - EditPayload::StyleUpdate(p) => { + EditPayload::CellStyleUpdate(p) => { let sheet_id = ctx .fetch_sheet_id_by_index(p.sheet_idx) .map_err(|l| BasicError::SheetIdxExceed(l))?; @@ -202,5 +202,11 @@ fn convert_diff( let cell_id = ctx.fetch_cell_id(&sheet_id, cr.row, cr.col)?; Ok(Some((Diff::CellValue(cell_id), sheet_id))) } + EditPayload::LineStyleUpdate(p) => { + let sheet_id = ctx + .fetch_sheet_id_by_index(p.sheet_idx) + .map_err(|l| BasicError::SheetIdxExceed(l))?; + Ok(Some((Diff::Unavailable, sheet_id))) + } } } diff --git a/crates/wasms/server/src/controller.rs b/crates/wasms/server/src/controller.rs index 3cf20cc6..be2501a2 100644 --- a/crates/wasms/server/src/controller.rs +++ b/crates/wasms/server/src/controller.rs @@ -1,9 +1,9 @@ use logisheets_controller::controller::display::{CellPosition, DisplaySheetRequest}; use logisheets_controller::edit_action::{ - AsyncFuncResult, BlockInput, CellClear, CellInput, CreateBlock, CreateSheet, DeleteCols, - DeleteColsInBlock, DeleteRows, DeleteRowsInBlock, DeleteSheet, EditAction, EditPayload, - InsertCols, InsertColsInBlock, InsertRows, InsertRowsInBlock, MoveBlock, PayloadsAction, - SetColWidth, SetRowHeight, SheetRename, StyleUpdate, StyleUpdateType, + AsyncFuncResult, BlockInput, CellClear, CellInput, CellStyleUpdate, CreateBlock, CreateSheet, + DeleteCols, DeleteColsInBlock, DeleteRows, DeleteRowsInBlock, DeleteSheet, EditAction, + EditPayload, InsertCols, InsertColsInBlock, InsertRows, InsertRowsInBlock, LineStyleUpdate, + MoveBlock, PayloadsAction, SetColWidth, SetRowHeight, SheetRename, StyleUpdateType, }; use logisheets_controller::{AsyncCalcResult, AsyncErr, RowInfo, SaveFileResult, Workbook}; use logisheets_controller::{ColInfo, ErrorMessage}; @@ -403,6 +403,57 @@ pub fn get_display_window_within_cell( result } +#[wasm_bindgen] +pub fn set_line_font( + id: usize, + sheet_idx: usize, + from: usize, + to: usize, + row: bool, + bold: Option, + italic: Option, + name: Option, + underline: Option, + color: Option, + size: Option, + outline: Option, + shadow: Option, + strike: Option, + condense: Option, +) { + let p = EditPayload::LineStyleUpdate(LineStyleUpdate { + sheet_idx, + from, + to, + row, + ty: StyleUpdateType { + set_font_bold: bold, + set_font_italic: italic, + set_font_underline: underline.map(|s| StUnderlineValues::deserialize(&s).unwrap()), + set_font_color: color, + set_font_size: size, + set_font_name: name, + set_font_outline: outline, + set_font_shadow: shadow, + set_font_strike: strike, + set_font_condense: condense, + set_left_border_color: None, + set_right_border_color: None, + set_top_border_color: None, + set_bottom_border_color: None, + set_left_border_style: None, + set_right_border_style: None, + set_top_border_style: None, + set_bottom_border_style: None, + set_border_giagonal_up: None, + set_border_giagonal_down: None, + set_border_outline: None, + set_pattern_fill: None, + }, + }); + MANAGER.get_mut().add_payload(id, p); +} + #[wasm_bindgen] pub fn set_font( id: usize, @@ -420,7 +471,7 @@ pub fn set_font( strike: Option, condense: Option, ) { - let p = EditPayload::StyleUpdate(StyleUpdate { + let p = EditPayload::CellStyleUpdate(CellStyleUpdate { sheet_idx, row, col, @@ -470,7 +521,7 @@ pub fn set_border( diagonal_up: Option, diagonal_down: Option, ) { - let p = EditPayload::StyleUpdate(StyleUpdate { + let p = EditPayload::CellStyleUpdate(CellStyleUpdate { sheet_idx, row, col, diff --git a/package.json b/package.json index a26db2e0..898cf5df 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,10 @@ "packages/*" ], "dependencies": { + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.0", + "@mui/icons-material": "^6.4.0", + "@mui/material": "^6.4.0", "@types/node": "^18", "@types/react": "^19", "@types/react-color": "^3.0.6", diff --git a/packages/web/src/bindings/style_update.ts b/packages/web/src/bindings/cell_style_update.ts similarity index 83% rename from packages/web/src/bindings/style_update.ts rename to packages/web/src/bindings/cell_style_update.ts index 6febed28..bc50d139 100644 --- a/packages/web/src/bindings/style_update.ts +++ b/packages/web/src/bindings/cell_style_update.ts @@ -1,7 +1,7 @@ // DO NOT EDIT. CODE GENERATED BY gents. import {StyleUpdateType} from './style_update_type' -export interface StyleUpdate { +export interface CellStyleUpdate { sheetIdx: number row: number col: number diff --git a/packages/web/src/bindings/edit_payload.ts b/packages/web/src/bindings/edit_payload.ts index 840dea89..aa0ddd3b 100644 --- a/packages/web/src/bindings/edit_payload.ts +++ b/packages/web/src/bindings/edit_payload.ts @@ -3,6 +3,7 @@ import {BlockInput} from './block_input' import {BlockStyleUpdate} from './block_style_update' import {CellClear} from './cell_clear' import {CellInput} from './cell_input' +import {CellStyleUpdate} from './cell_style_update' import {CreateBlock} from './create_block' import {CreateSheet} from './create_sheet' import {DeleteColsInBlock} from './delete_cols_in_block' @@ -14,13 +15,13 @@ import {InsertColsInBlock} from './insert_cols_in_block' import {InsertCols} from './insert_cols' import {InsertRowsInBlock} from './insert_rows_in_block' import {InsertRows} from './insert_rows' +import {LineStyleUpdate} from './line_style_update' import {MoveBlock} from './move_block' import {RemoveBlock} from './remove_block' import {SetColWidth} from './set_col_width' import {SetRowHeight} from './set_row_height' import {SetVisible} from './set_visible' import {SheetRename} from './sheet_rename' -import {StyleUpdate} from './style_update' // `EditPayload` is the basic update unit of the Workbook. Developers can config their own // `EditAction` (e.g. setting a button to create a table) to facilitate their users. @@ -29,7 +30,8 @@ export type EditPayload = | {moveBlock: MoveBlock} | {removeBlock: RemoveBlock} | {createBlock: CreateBlock} - | {styleUpdate: StyleUpdate} + | {cellStyleUpdate: CellStyleUpdate} + | {lineStyleUpdate: LineStyleUpdate} | {blockStyleUpdate: BlockStyleUpdate} | {cellInput: CellInput} | {cellClear: CellClear} diff --git a/packages/web/src/bindings/index.ts b/packages/web/src/bindings/index.ts index 463f3671..b86d8d76 100644 --- a/packages/web/src/bindings/index.ts +++ b/packages/web/src/bindings/index.ts @@ -16,6 +16,7 @@ export * from './cell_input' export * from './cell_position' export * from './cell_protection' export * from './cell_style' +export * from './cell_style_update' export * from './col_info' export * from './color' export * from './comment' @@ -46,6 +47,7 @@ export * from './insert_cols' export * from './insert_cols_in_block' export * from './insert_rows' export * from './insert_rows_in_block' +export * from './line_style_update' export * from './merge_cell' export * from './move_block' export * from './msg_edit' @@ -85,7 +87,6 @@ export * from './st_vertical_align_run' export * from './st_vertical_alignment' export * from './status_code' export * from './style' -export * from './style_update' export * from './style_update_type' export * from './task' export * from './underline_property' diff --git a/packages/web/src/bindings/line_style_update.ts b/packages/web/src/bindings/line_style_update.ts new file mode 100644 index 00000000..7f066b66 --- /dev/null +++ b/packages/web/src/bindings/line_style_update.ts @@ -0,0 +1,10 @@ +// DO NOT EDIT. CODE GENERATED BY gents. +import {StyleUpdateType} from './style_update_type' + +export interface LineStyleUpdate { + sheetIdx: number + from: number + to: number + ty: StyleUpdateType + row: boolean +} diff --git a/src/components/top-bar/content/index.tsx b/src/components/top-bar/content/index.tsx index 01383740..e7d11359 100644 --- a/src/components/top-bar/content/index.tsx +++ b/src/components/top-bar/content/index.tsx @@ -7,6 +7,20 @@ import {DataService} from '@/core/data' import {useInjection} from '@/core/ioc/provider' import {TYPES} from '@/core/ioc/types' import {isErrorMessage} from 'packages/web/src/api/utils' +import Modal from 'react-modal' +import FormatBoldIcon from '@mui/icons-material/FormatBold' +import FormatItalicIcon from '@mui/icons-material/FormatItalic' +import FormatUnderlinedIcon from '@mui/icons-material/FormatUnderlined' +import FormatColorFillIcon from '@mui/icons-material/FormatColorFill' +import FromatColorTextIcon from '@mui/icons-material/FormatColorText' +import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown' +import FormatAlignLeftIcon from '@mui/icons-material/FormatAlignLeft' +import FormatAlignCenterIcon from '@mui/icons-material/FormatAlignCenter' +import FormatAlignRightIcon from '@mui/icons-material/FormatAlignRight' +import FormatAlignJustifyIcon from '@mui/icons-material/FormatAlignJustify' +import ToggleButton from '@mui/material/ToggleButton' +import ToggleButtonGroup from '@mui/material/ToggleButtonGroup' +import Divider from '@mui/material/Divider' export * from './font-size' export * from './start-item' @@ -22,6 +36,9 @@ export const StartComponent = ({selectedData}: StartProps) => { const [openSketchPicker, setOpenSketchPicker] = useState(false) const [fontColor, setFontColor] = useState('#000') + const [fontFormats, setFontFormats] = useState([]) + const [alignment, setAlignment] = useState('left') + useEffect(() => { if (selectedData === undefined) { _setDefaultStyle() @@ -35,7 +52,7 @@ export const StartComponent = ({selectedData}: StartProps) => { } const _initStyle = () => { - if (!selectedData) return + if (!selectedData || !selectedData.data) return const cell = getFirstCell(selectedData) const {r: row, c: col} = cell const sheet = DATA_SERVICE.getCurrentSheetIdx() @@ -45,6 +62,11 @@ export const StartComponent = ({selectedData}: StartProps) => { const style = c.getStyle() const font = StandardFont.from(style.font) setFontColor(font.standardColor.css()) + const fontFormat = [] + if (font.bold) fontFormat.push('bold') + if (font.italic) fontFormat.push('italic') + if (font.underline?.val != 'none') fontFormat.push('underlined') + setFontFormats(fontFormat) }) } @@ -54,25 +76,84 @@ export const StartComponent = ({selectedData}: StartProps) => { setFontColor(standardColor.css()) setOpenSketchPicker(false) } + + const handleFontFormat = ( + _: React.MouseEvent, + newFormats: string[] + ) => { + if (!selectedData || !selectedData.data) { + return + } + } + return ( -
-
-
+ setOpenSketchPicker(true)} > -
A
-
-
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {openSketchPicker ? ( - + setOpenSketchPicker(false)} + className={styles['modal-content']} + overlayClassName={styles['modal-overlay']} + style={{content: {top: '100px', left: '0px'}}} + > + + ) : null}
) diff --git a/src/components/top-bar/content/payload.ts b/src/components/top-bar/content/payload.ts new file mode 100644 index 00000000..b577be80 --- /dev/null +++ b/src/components/top-bar/content/payload.ts @@ -0,0 +1,31 @@ +import {SelectedData} from '@/components/canvas' +import {Payload, SetFontBuilder} from 'logisheets-web' + +export function generateFontPayload( + sheetIdx: number, + data: SelectedData, + bold?: boolean, + underlined?: boolean, + italic?: boolean +): Payload[] { + if (!data.data) return [] + const result: Payload[] = [] + const t = data.data.ty + if (t === 'cellRange') { + const d = data.data.d + for (let i = d.startRow; i <= d.endRow; i += 1) { + for (let j = d.startCol; j <= d.endCol; j += 1) { + const builder = new SetFontBuilder() + .sheetIdx(sheetIdx) + .row(i) + .col(j) + if (bold !== undefined) builder.bold(bold) + if (underlined !== underlined) builder.underline('single') + if (italic !== undefined) builder.italic(italic) + const p = builder.build() + result.push(p) + } + } + } + return [] +} diff --git a/src/components/top-bar/content/start.module.scss b/src/components/top-bar/content/start.module.scss index 3c064917..000eb74f 100644 --- a/src/components/top-bar/content/start.module.scss +++ b/src/components/top-bar/content/start.module.scss @@ -1,10 +1,10 @@ -:host { +.host { flex-direction: row; align-items: center; display: flex; box-sizing: border-box; height: 100%; - padding: 11px 24px; + padding: 4px 0px; } .font-color { flex-direction: column; @@ -24,3 +24,23 @@ position: absolute; z-index: 1; } + +.modal-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.5); + z-index: 9999; +} + +.modal-content { + position: absolute; + background-color: rgba(255, 255, 255, 0); // 透明背景 + border: none; + margin: 0; + padding: 0; + align-items: center; + z-index: 10000; +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 9718fe9b..72267ebb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1597,7 +1597,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.10.4, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.16.7, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.19.0, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.22.5, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.6, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.24.4, @babel/runtime@npm:^7.24.7, @babel/runtime@npm:^7.24.8, @babel/runtime@npm:^7.25.7, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.10.4, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.16.7, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.19.0, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.22.5, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.6, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.24.4, @babel/runtime@npm:^7.24.7, @babel/runtime@npm:^7.24.8, @babel/runtime@npm:^7.25.7, @babel/runtime@npm:^7.26.0, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": version: 7.26.0 resolution: "@babel/runtime@npm:7.26.0" dependencies: @@ -1864,7 +1864,7 @@ __metadata: languageName: node linkType: hard -"@emotion/cache@npm:^11.14.0, @emotion/cache@npm:^11.4.0": +"@emotion/cache@npm:^11.13.5, @emotion/cache@npm:^11.14.0, @emotion/cache@npm:^11.4.0": version: 11.14.0 resolution: "@emotion/cache@npm:11.14.0" dependencies: @@ -1891,6 +1891,15 @@ __metadata: languageName: node linkType: hard +"@emotion/is-prop-valid@npm:^1.3.0": + version: 1.3.1 + resolution: "@emotion/is-prop-valid@npm:1.3.1" + dependencies: + "@emotion/memoize": "npm:^0.9.0" + checksum: 10c0/123215540c816ff510737ec68dcc499c53ea4deb0bb6c2c27c03ed21046e2e69f6ad07a7a174d271c6cfcbcc9ea44e1763e0cf3875c92192f7689216174803cd + languageName: node + linkType: hard + "@emotion/memoize@npm:^0.9.0": version: 0.9.0 resolution: "@emotion/memoize@npm:0.9.0" @@ -1898,7 +1907,7 @@ __metadata: languageName: node linkType: hard -"@emotion/react@npm:^11.8.1": +"@emotion/react@npm:^11.14.0, @emotion/react@npm:^11.8.1": version: 11.14.0 resolution: "@emotion/react@npm:11.14.0" dependencies: @@ -1939,6 +1948,26 @@ __metadata: languageName: node linkType: hard +"@emotion/styled@npm:^11.14.0": + version: 11.14.0 + resolution: "@emotion/styled@npm:11.14.0" + dependencies: + "@babel/runtime": "npm:^7.18.3" + "@emotion/babel-plugin": "npm:^11.13.5" + "@emotion/is-prop-valid": "npm:^1.3.0" + "@emotion/serialize": "npm:^1.3.3" + "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.2.0" + "@emotion/utils": "npm:^1.4.2" + peerDependencies: + "@emotion/react": ^11.0.0-rc.0 + react: ">=16.8.0" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/20aa5c488e4edecf63659212fc5ba1ccff2d3a66593fc8461de7cd5fe9192a741db357ffcd270a455bd61898d7f37cd5c84b4fd2b7974dade712badf7860ca9c + languageName: node + linkType: hard + "@emotion/unitless@npm:^0.10.0": version: 0.10.0 resolution: "@emotion/unitless@npm:0.10.0" @@ -2822,6 +2851,165 @@ __metadata: languageName: node linkType: hard +"@mui/core-downloads-tracker@npm:^6.4.0": + version: 6.4.0 + resolution: "@mui/core-downloads-tracker@npm:6.4.0" + checksum: 10c0/48112fb90df2fe58fdbc8ca9c8fac3487dc3aa0fbc31bd1e6b373f43f5bbb23d6fc673686b42cb46723e2d8c66ae914ecb9397c38e7d43a340ec6cbe07e1469d + languageName: node + linkType: hard + +"@mui/icons-material@npm:^6.4.0": + version: 6.4.0 + resolution: "@mui/icons-material@npm:6.4.0" + dependencies: + "@babel/runtime": "npm:^7.26.0" + peerDependencies: + "@mui/material": ^6.4.0 + "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/5e05dbb67e0f7e0c046d5665bebf41df487b31ce617987ac0e8da9c539221bad7e523bf77f0f0153b35aadb56f02146aded567e8032ba608696f70b708d505c0 + languageName: node + linkType: hard + +"@mui/material@npm:^6.4.0": + version: 6.4.0 + resolution: "@mui/material@npm:6.4.0" + dependencies: + "@babel/runtime": "npm:^7.26.0" + "@mui/core-downloads-tracker": "npm:^6.4.0" + "@mui/system": "npm:^6.4.0" + "@mui/types": "npm:^7.2.21" + "@mui/utils": "npm:^6.4.0" + "@popperjs/core": "npm:^2.11.8" + "@types/react-transition-group": "npm:^4.4.12" + clsx: "npm:^2.1.1" + csstype: "npm:^3.1.3" + prop-types: "npm:^15.8.1" + react-is: "npm:^19.0.0" + react-transition-group: "npm:^4.4.5" + peerDependencies: + "@emotion/react": ^11.5.0 + "@emotion/styled": ^11.3.0 + "@mui/material-pigment-css": ^6.4.0 + "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + "@mui/material-pigment-css": + optional: true + "@types/react": + optional: true + checksum: 10c0/5bd9757b578827d841934725a7145ae1d295cbc979fec4fb1a099c439ae0db1a67ace47b2a94f289ac5289d16b0167ebba9a4e98b0499840555b60fb5b549923 + languageName: node + linkType: hard + +"@mui/private-theming@npm:^6.4.0": + version: 6.4.0 + resolution: "@mui/private-theming@npm:6.4.0" + dependencies: + "@babel/runtime": "npm:^7.26.0" + "@mui/utils": "npm:^6.4.0" + prop-types: "npm:^15.8.1" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/3e89ff9e6baf85b1bdb0ed55e1ef50dadd95991ed498928e1764c1255fa174c0d134a46beebb1e4faabc22820b404923911c2bf6e9692fd269a77522c356eb6c + languageName: node + linkType: hard + +"@mui/styled-engine@npm:^6.4.0": + version: 6.4.0 + resolution: "@mui/styled-engine@npm:6.4.0" + dependencies: + "@babel/runtime": "npm:^7.26.0" + "@emotion/cache": "npm:^11.13.5" + "@emotion/serialize": "npm:^1.3.3" + "@emotion/sheet": "npm:^1.4.0" + csstype: "npm:^3.1.3" + prop-types: "npm:^15.8.1" + peerDependencies: + "@emotion/react": ^11.4.1 + "@emotion/styled": ^11.3.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + checksum: 10c0/bff35147ca9ef586679b53786d840e98837f0c1e5bf10a3510d4b2b68c340ae4ab69befe94b69ef25f6846bada5b3c355d25fa3a179d1598499e28c51f28d5d2 + languageName: node + linkType: hard + +"@mui/system@npm:^6.4.0": + version: 6.4.0 + resolution: "@mui/system@npm:6.4.0" + dependencies: + "@babel/runtime": "npm:^7.26.0" + "@mui/private-theming": "npm:^6.4.0" + "@mui/styled-engine": "npm:^6.4.0" + "@mui/types": "npm:^7.2.21" + "@mui/utils": "npm:^6.4.0" + clsx: "npm:^2.1.1" + csstype: "npm:^3.1.3" + prop-types: "npm:^15.8.1" + peerDependencies: + "@emotion/react": ^11.5.0 + "@emotion/styled": ^11.3.0 + "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + "@types/react": + optional: true + checksum: 10c0/5e8d82674693d747b947ce4e5c1a11fff148c5242b2af898d80575e780f0abd3857f234a47b1cec16ca02334ecc7450f0afb5e311ddee9e9cf342e5bf3c7c1fc + languageName: node + linkType: hard + +"@mui/types@npm:^7.2.21": + version: 7.2.21 + resolution: "@mui/types@npm:7.2.21" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/c0038ae402a3cfb2805a19167362fb5ac2ca1403f0ef3dad688d1e2276afe757b69d5fb1e3af4cd0e985b9221d287fd863c5b00f29fd07a276c7de9e3423a0f3 + languageName: node + linkType: hard + +"@mui/utils@npm:^6.4.0": + version: 6.4.0 + resolution: "@mui/utils@npm:6.4.0" + dependencies: + "@babel/runtime": "npm:^7.26.0" + "@mui/types": "npm:^7.2.21" + "@types/prop-types": "npm:^15.7.14" + clsx: "npm:^2.1.1" + prop-types: "npm:^15.8.1" + react-is: "npm:^19.0.0" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/c72ab7685affb577f1b48a5f5be02d11254cddf858cc35d61e0483434249cc064f2d145e9e72be60c344f31ccc7d6e61c59a256413b7e68077e883c0ffc8882e + languageName: node + linkType: hard + "@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1": version: 5.1.1-v1 resolution: "@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1" @@ -3068,6 +3256,13 @@ __metadata: languageName: node linkType: hard +"@popperjs/core@npm:^2.11.8": + version: 2.11.8 + resolution: "@popperjs/core@npm:2.11.8" + checksum: 10c0/4681e682abc006d25eb380d0cf3efc7557043f53b6aea7a5057d0d1e7df849a00e281cd8ea79c902a35a414d7919621fc2ba293ecec05f413598e0b23d5a1e63 + languageName: node + linkType: hard + "@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": version: 1.1.2 resolution: "@protobufjs/aspromise@npm:1.1.2" @@ -4044,7 +4239,7 @@ __metadata: languageName: node linkType: hard -"@types/prop-types@npm:*": +"@types/prop-types@npm:*, @types/prop-types@npm:^15.7.14": version: 15.7.14 resolution: "@types/prop-types@npm:15.7.14" checksum: 10c0/1ec775160bfab90b67a782d735952158c7e702ca4502968aa82565bd8e452c2de8601c8dfe349733073c31179116cf7340710160d3836aa8a1ef76d1532893b1 @@ -4113,7 +4308,7 @@ __metadata: languageName: node linkType: hard -"@types/react-transition-group@npm:^4.4.0, @types/react-transition-group@npm:^4.4.4": +"@types/react-transition-group@npm:^4.4.0, @types/react-transition-group@npm:^4.4.12, @types/react-transition-group@npm:^4.4.4": version: 4.4.12 resolution: "@types/react-transition-group@npm:4.4.12" peerDependencies: @@ -14838,6 +15033,13 @@ __metadata: languageName: node linkType: hard +"react-is@npm:^19.0.0": + version: 19.0.0 + resolution: "react-is@npm:19.0.0" + checksum: 10c0/d1be8e8500cf04f76df71942a21ef3a71266397a383d7ec8885f35190df818d35c65efd35aed7be47a89ad99aaff2c52e0c4e39e8930844a6b997622e50625a8 + languageName: node + linkType: hard + "react-lifecycles-compat@npm:^3.0.0": version: 3.0.4 resolution: "react-lifecycles-compat@npm:3.0.4" @@ -15013,7 +15215,7 @@ __metadata: languageName: node linkType: hard -"react-transition-group@npm:^4.3.0, react-transition-group@npm:^4.4.2": +"react-transition-group@npm:^4.3.0, react-transition-group@npm:^4.4.2, react-transition-group@npm:^4.4.5": version: 4.4.5 resolution: "react-transition-group@npm:4.4.5" dependencies: @@ -15564,6 +15766,10 @@ __metadata: version: 0.0.0-use.local resolution: "root-workspace-0b6124@workspace:." dependencies: + "@emotion/react": "npm:^11.14.0" + "@emotion/styled": "npm:^11.14.0" + "@mui/icons-material": "npm:^6.4.0" + "@mui/material": "npm:^6.4.0" "@types/enzyme": "npm:^3.10.12" "@types/glob": "npm:^7.2.0" "@types/jest": "npm:^27.4.0"