feat(design): add DatePicker (#1497)

* feat(design): add `DatePicker`
This commit is contained in:
白熱
2024-03-06 21:35:06 +08:00
committed by GitHub
parent 271574a0f9
commit 44ec0562e7
27 changed files with 1158 additions and 151 deletions
+10 -3
View File
@@ -16,7 +16,7 @@
import React from 'react';
import type { Preview } from '@storybook/react';
import { defaultTheme, greenTheme, themeInstance } from '@univerjs/design';
import { ConfigProvider, defaultTheme, enUS, greenTheme, themeInstance, zhCN } from '@univerjs/design';
import {
CommandService,
ConfigService,
@@ -28,6 +28,7 @@ import {
IConfigService,
IContextService,
IFloatingObjectManagerService,
ILocalStorageService,
ILogService,
IPermissionService,
IResourceManagerService,
@@ -46,6 +47,7 @@ import {
} from '@univerjs/core';
import { Injector } from '@wendellhu/redi';
import { RediContext } from '@wendellhu/redi/react-bindings';
import { DesktopLocalStorageService } from '@univerjs/ui';
export const themes: Record<string, Record<string, string>> = {
default: defaultTheme,
@@ -103,15 +105,20 @@ const preview: Preview = {
[IContextService, { useClass: ContextService }],
[IFloatingObjectManagerService, { useClass: FloatingObjectManagerService, lazy: true }],
[IResourceManagerService, { useClass: ResourceManagerService, lazy: true }],
// services
[ILocalStorageService, { useClass: DesktopLocalStorageService, lazy: true }],
]);
injector.get(LocaleService).load({});
injector.get(LocaleService).setLocale(context.globals.i18n);
themeInstance.setTheme(document.body, themes[context.globals.theme]);
const designLocale = context.globals.i18n === LocaleType.ZH_CN ? zhCN : enUS;
return (
<RediContext.Provider value={{ injector }}>
<Story />
<ConfigProvider locale={designLocale} mountContainer={document.body}>
<Story />
</ConfigProvider>
</RediContext.Provider>
);
}],
+3 -3
View File
@@ -17,7 +17,7 @@
"@univerjs/engine-formula": "workspace:*",
"@univerjs/engine-render": "workspace:*",
"@univerjs/find-replace": "workspace:*",
"@univerjs/icons": "^0.1.30",
"@univerjs/icons": "^0.1.39",
"@univerjs/rpc": "workspace:*",
"@univerjs/sheets": "workspace:*",
"@univerjs/sheets-find-replace": "workspace:*",
@@ -38,8 +38,8 @@
"rxjs": "^7.8.1"
},
"devDependencies": {
"@types/react": "^18.2.57",
"@types/react-dom": "^18.2.19",
"@types/react": "^18.2.63",
"@types/react-dom": "^18.2.20",
"@univerjs/shared": "workspace:*",
"esbuild": "^0.20.1",
"esbuild-plugin-clean": "^1.0.1",
@@ -298,7 +298,7 @@ export class UniverInstanceService extends Disposable implements IUniverInstance
const index = this._docs.indexOf(doc);
this._docs.splice(index, 1);
this._docDisposed$.next(doc);
this.focusUniverInstance(null);
// this.focusUniverInstance(null);
return true;
}
@@ -307,7 +307,7 @@ export class UniverInstanceService extends Disposable implements IUniverInstance
const index = this._sheets.indexOf(sheet);
this._sheets.splice(index, 1);
this._sheetDisposed$.next(sheet);
this.focusUniverInstance(null);
// this.focusUniverInstance(null);
return true;
}
@@ -316,7 +316,7 @@ export class UniverInstanceService extends Disposable implements IUniverInstance
const index = this._slides.indexOf(slide);
this._slides.splice(index, 1);
this._slideDisposed$.next(slide);
this.focusUniverInstance(null);
// this.focusUniverInstance(null);
return true;
}
@@ -17,7 +17,7 @@
import { Subject } from 'rxjs';
import { Disposable, toDisposable } from '../../shared/lifecycle';
import type { ILanguagePack, ILocales } from '../../shared/locale';
import type { ILanguagePack, ILocales, LanguageValue } from '../../shared/locale';
import { Tools } from '../../shared/tools';
import { LocaleType } from '../../types/enum/locale-type';
@@ -73,7 +73,7 @@ export class LocaleService extends Disposable {
t = (key: string, ...args: string[]): string => {
if (!this._locales) throw new Error('Locale not initialized');
function resolveKeyPath(obj: ILanguagePack | ILanguagePack[], keys: string[]): string | ILanguagePack | ILanguagePack[] | null {
function resolveKeyPath(obj: ILanguagePack, keys: string[]): LanguageValue | null {
const currentKey = keys.shift();
if (currentKey && obj && currentKey in obj) {
+3 -1
View File
@@ -14,8 +14,10 @@
* limitations under the License.
*/
export type LanguageValue = string | string[] | ILanguagePack | ILanguagePack[] | boolean;
export interface ILanguagePack {
[key: string]: string | ILanguagePack | ILanguagePack[];
[key: string]: LanguageValue;
}
export interface ILocales {
+8 -6
View File
@@ -71,22 +71,24 @@
"dependencies": {
"@rc-component/color-picker": "^1.5.2",
"@rc-component/trigger": "^1.18.3",
"@univerjs/icons": "^0.1.30",
"rc-dialog": "^9.3.4",
"@univerjs/icons": "^0.1.39",
"dayjs": ">=1.11.10",
"rc-dialog": "^9.4.0",
"rc-dropdown": "^4.1.0",
"rc-input": "^1.4.3",
"rc-input-number": "^9.0.0",
"rc-menu": "^9.12.4",
"rc-select": "^14.11.0",
"rc-picker": "^4.2.0",
"rc-select": "^14.12.0",
"rc-tooltip": "^6.1.3",
"rc-util": "^5.38.2",
"rc-util": "^5.39.0",
"react-draggable": "^4.4.6",
"react-transition-group": "^4.4.5"
},
"devDependencies": {
"@testing-library/react": "^14.2.1",
"@types/react": "^18.2.57",
"@types/react-dom": "^18.2.19",
"@types/react": "^18.2.63",
"@types/react-dom": "^18.2.20",
"@types/react-transition-group": "^4.4.10",
"@univerjs/shared": "workspace:*",
"clsx": "^2.1.0",
@@ -0,0 +1,44 @@
/**
* Copyright 2023-present DreamNum Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import type { Meta } from '@storybook/react';
import React, { useState } from 'react';
import Dayjs from 'dayjs';
import { DatePicker } from './DatePicker';
const meta: Meta<typeof DatePicker> = {
title: 'Components / DatePicker',
component: DatePicker,
parameters: {
layout: 'centered',
},
tags: ['autodocs'],
};
export default meta;
export const DatePickerBasic = {
render() {
const [value, setValue] = useState<Dayjs.Dayjs>(Dayjs());
return (
<>
<DatePicker value={value} onChange={setValue} />
</>
);
},
};
@@ -0,0 +1,58 @@
/**
* Copyright 2023-present DreamNum Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React, { useContext } from 'react';
import RcPicker from 'rc-picker';
import generateConfig from 'rc-picker/lib/generate/dayjs';
import { CalendarSingle } from '@univerjs/icons';
import type { Dayjs } from 'dayjs';
import { ConfigContext } from '../config-provider/ConfigProvider';
import styles from './index.module.less';
export interface IDatePickerProps {
/**
* The value of the date picker.
*/
value: Dayjs;
/**
* Callback when the value of the date picker changes.
*/
onChange: (date: Dayjs, dateString: string) => void;
}
export function DatePicker(props: IDatePickerProps) {
const { value, onChange } = props;
const { locale } = useContext(ConfigContext);
function handleChange(date: Dayjs | Dayjs[], dateString: string | string[]) {
if (!Array.isArray(date) && !Array.isArray(dateString)) {
onChange(date, dateString);
}
}
return (
<RcPicker<Dayjs>
value={value}
prefixCls={styles.datePicker}
generateConfig={generateConfig}
locale={locale.design.Picker}
suffixIcon={<CalendarSingle className={styles.datePickerSuffixIcon} />}
onChange={handleChange}
/>
);
}
@@ -0,0 +1,684 @@
@prefix-cls: date-picker;
@background-color: rgb(var(--bg-color-secondary));
@input-placeholder-color: hsv(0, 0, 75%);
@time-panel-padding-total: 180px;
// @time-panel-padding-top: 90px;
@time-panel-padding-top: 0;
@cell-size: 24px;
.placeholder(@color: @input-placeholder-color) {
// Firefox
&::-moz-placeholder {
opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526
}
&::placeholder {
color: @color;
}
&:placeholder-shown {
text-overflow: ellipsis;
}
}
.@{prefix-cls} {
position: relative;
width: 200px;
height: 32px;
border: 1px solid rgb(var(--border-color));
border-radius: 4px;
box-sizing: border-box;
display: inline-flex;
&-rtl {
direction: rtl;
}
&-focused {
// border: 1px solid rgb(var(--primary-color));
}
&-invalid {
box-shadow: 0 0 2px red;
}
&-panel {
display: inline-block;
vertical-align: top;
&-focused {
border-color: blue;
}
&-rtl {
direction: rtl;
}
}
&-suffix-icon {
position: absolute;
top: 50%;
right: 0;
bottom: 0;
display: flex;
align-items: center;
padding: 0 8px;
color: rgb(var(--text-color-secondary));
transform: translateY(-50%);
cursor: pointer;
}
// ===================== Shared Panel =====================
&-decade-panel,
&-year-panel,
&-month-panel,
&-week-panel,
&-date-panel,
&-time-panel {
display: flex;
flex-direction: column;
table {
text-align: center;
border-collapse: collapse;
}
}
// Header
&-header {
margin-bottom: var(--margin-base);
display: flex;
align-items: center;
> * {
flex: none;
}
&-view {
height: 16px;
flex: auto;
display: flex;
justify-content: center;
align-items: center;
gap: var(--margin-xs);
> button {
padding: 0;
border: 0;
background-color: transparent;
cursor: pointer;
}
}
.btn () {
width: 16px;
height: 16px;
padding: 0;
line-height: 16px;
font-size: var(--font-size-lg);
border: none;
background-color: transparent;
cursor: pointer;
}
&-super {
&-prev,
&-next {
&-btn {
.btn();
}
}
}
&-prev,
&-next {
&-btn {
.btn();
}
}
}
// Content
&-cell {
color: #aaa;
&-disabled {
opacity: 0.2;
}
&-inner {
display: inline-block;
box-sizing: border-box;
width: 100%;
height: @cell-size;
margin: 0;
padding: 0;
font-size: 12px;
line-height: @cell-size;
background: transparent;
border: 0;
border-radius: var(--border-radius-base);
outline: none;
cursor: pointer;
transition: background 0.3s;
}
&-in-view {
color: #333;
}
&-in-range > &-inner {
background: fade(blue, 5%);
}
&-hover > &-inner {
background: rgb(var(--bg-color));
}
&-range-hover-start,
&-range-hover-end,
&-range-hover {
position: relative;
&::after {
position: absolute;
top: 3px;
right: 0;
bottom: 0;
left: 0;
border: 1px solid green;
border-right: 0;
border-left: 0;
content: '';
pointer-events: none;
}
}
&-range-hover-start::after {
border-left: 1px solid green !important;
}
&-range-hover-end::after {
border-right: 1px solid green !important;
}
&-today > &-inner {
border: 1px solid rgb(var(--primary-color));
}
&-range-start > &-inner,
&-range-end > &-inner,
&-selected > &-inner {
// TODO:
// background: fade(blue, 20%);
color: #fff;
background: rgb(var(--primary-color));
}
}
// Preset
&-presets {
background: #ccccff;
ul {
margin: 0;
padding: 0;
list-style: none;
}
}
&-now {
padding-top: var(--padding-base);
&-btn {
font-size: var(--font-size-xs);
color: rgb(var(--primary-color));
cursor: pointer;
}
}
&-footer,
&-picker-footer {
margin-top: var(--margin-sm);
border-top: 1px solid rgb(var(--border-color));
}
&-ranges {
margin: 0;
padding: 0;
overflow: hidden;
list-style: none;
> li {
text-align: center;
display: block;
}
}
&-ok {
float: right;
}
&-decade-panel {
.@{prefix-cls}-content {
tbody {
display: grid;
gap: 20px;
}
}
.@{prefix-cls}-cell-inner {
width: 78px;
height: 24px;
}
}
// ================== Year & Month Panel ==================
&-year-panel,
&-month-panel {
.@{prefix-cls}-content {
tbody {
display: grid;
gap: 20px;
}
}
.@{prefix-cls}-cell-inner {
width: 48px;
height: 24px;
}
}
// ====================== Week Panel ======================
&-week-panel {
&-row {
&:hover {
.@{prefix-cls}-cell {
background: red;
}
}
&-selected {
.@{prefix-cls}-cell {
background: rgba(0, 0, 255, 0.3);
}
}
&-range {
&-hover {
.@{prefix-cls}-cell {
background: rgba(0, 255, 0, 0.1);
}
}
&-start,
&-end {
.@{prefix-cls}-cell {
background: rgba(0, 255, 0, 0.3);
}
}
}
}
.@{prefix-cls}-cell,
.@{prefix-cls}-cell-inner {
width: @cell-size;
}
.@{prefix-cls}-cell-week {
color: #999;
font-weight: bold;
font-size: 12px;
}
.@{prefix-cls}-cell:hover > .@{prefix-cls}-cell-inner,
.@{prefix-cls}-cell-selected > .@{prefix-cls}-cell-inner {
background: transparent;
}
}
// ====================== Date Panel ======================
&-date-panel {
.@{prefix-cls}-cell-inner {
width: @cell-size;
height: @cell-size;
font-size: var(--font-size-xs);
}
}
// ====================== Time Panel ======================
&-time-panel {
width: auto;
.@{prefix-cls}-content {
position: relative;
display: flex;
max-height: 200px;
// &::after {
// position: absolute;
// top: @time-panel-padding-top;
// right: -5px;
// left: -5px;
// height: 20px;
// background: rgba(255, 0, 0, 0.05);
// content: '';
// pointer-events: none;
// }
}
// &-column-holder {
// display: flex;
// flex-direction: column;
// text-align: center;
// }
&-column-title {
font-size: 14px;
line-height: @cell-size;
}
&-column {
flex: auto;
width: 50px;
margin: 0;
// padding: 0 0 180px 0;
padding: @time-panel-padding-top 0
(@time-panel-padding-total - @time-panel-padding-top);
overflow-x: hidden;
overflow-y: hidden;
font-size: 12px;
text-align: left;
list-style: none;
transition: background 0.3s;
&-active {
background: rgba(0, 0, 255, 0.1);
}
&:hover {
overflow-y: auto;
}
> li {
width: 50px;
margin: 0;
padding: 0;
cursor: pointer;
&.@{prefix-cls}-time-panel-cell {
&-disabled {
opacity: 0.5;
}
&-selected {
background: rgba(0, 0, 255, 0.5);
}
}
.@{prefix-cls}-time-panel-cell-inner {
display: block;
width: 100%;
height: @cell-size;
margin: 0;
// padding: 0 0 0 12px;
color: #333;
line-height: @cell-size;
text-align: center;
.@{prefix-cls}-panel-rtl & {
padding: 0 12px 0 0;
text-align: right;
}
}
}
}
}
// ====================== Date Time =======================
&-datetime-panel {
display: flex;
.@{prefix-cls}-time-panel {
border-left: 1px solid #999;
}
.@{prefix-cls}-date-panel,
.@{prefix-cls}-time-panel {
transition: opacity 0.3s;
}
// Keyboard
&-active {
.@{prefix-cls}-date-panel,
.@{prefix-cls}-time-panel {
opacity: 0.3;
&-active {
opacity: 1;
}
}
}
}
// ======================== Input =========================
&-input {
position: relative;
display: inline-flex;
width: 100%;
.@{prefix-cls}-rtl & {
text-align: right;
}
&-active {
> input {
background: rgba(0, 0, 255, 0.05);
}
}
> input {
width: 100%;
padding-left: 12px;
border: none;
border-radius: var(--border-radius-base);
box-sizing: border-box;
.placeholder();
&:focus {
outline: none;
}
}
&-placeholder {
> input {
color: @input-placeholder-color;
}
}
}
&-clear {
position: absolute;
top: 7px;
right: 8px;
cursor: pointer;
.@{prefix-cls}-rtl & {
right: auto;
left: 4px;
}
&-btn {
width: 16px;
height: 16px;
text-align: center;
line-height: 16px;
background-color: rgb(var(--grey-500));
border-radius: 50%;
display: block;
&::before {
content: '×';
position: absolute;
top: -1px;
left: 0;
right: 0;
bottom: 0;
color: white;
font-size: 16px;
line-height: 16px;
}
}
}
// ======================= Dropdown =======================
&-dropdown {
position: absolute;
pointer-events: none;
&-range {
padding: 10px 0;
}
&-hidden {
display: none;
}
// Panel
@arrow-size: 10px;
&-placement-topLeft,
&-placement-topRight {
.@{prefix-cls}-range-arrow {
bottom: @arrow-size / 2 + 1px;
transform: rotate(135deg);
}
}
&-placement-bottomLeft,
&-placement-bottomright {
.@{prefix-cls}-range-arrow {
top: (@arrow-size / 2 + 1px);
transform: rotate(-45deg);
}
}
.@{prefix-cls}-range-arrow {
position: absolute;
left: @arrow-size;
z-index: 1;
width: @arrow-size;
height: @arrow-size;
margin-left: 10px;
transition: all 0.3s;
.@{prefix-cls}-dropdown-rtl& {
right: @arrow-size;
left: auto;
margin-right: 10px;
margin-left: 0;
}
&::before,
&::after {
position: absolute;
top: 50%;
left: 50%;
box-sizing: border-box;
transform: translate(-50%, -50%);
content: '';
.@{prefix-cls}-dropdown-rtl& {
right: 50%;
left: auto;
transform: translate(50%, -50%);
}
}
&::before {
width: @arrow-size;
height: @arrow-size;
border: (@arrow-size / 2) solid blue;
border-color: blue blue transparent transparent;
}
&::after {
width: @arrow-size - 2px;
height: @arrow-size - 2px;
border: (@arrow-size - 2px) / 2 solid blue;
border-color: @background-color @background-color transparent
transparent;
}
}
}
// ========================================================
// = Range Picker =
// ========================================================
&-range {
position: relative;
display: inline-flex;
&-wrapper {
display: flex;
}
.@{prefix-cls}-active-bar {
bottom: 0;
height: 3px;
background: green;
opacity: 0;
transition: all 0.3s;
pointer-events: none;
}
&.@{prefix-cls}-focused {
.@{prefix-cls}-active-bar {
opacity: 1;
}
}
}
&-panel-container {
display: inline-block;
vertical-align: top;
transition: margin 0.3s;
pointer-events: all;
}
&-panel-layout {
padding: var(--padding-lg);
background: rgb(var(--bg-color-secondary));
border: 1px solid rgb(var(--border-color));
border-radius: var(--border-radius-lg);
box-shadow: var(--box-shadow-base);
display: flex;
flex-wrap: nowrap;
align-items: stretch;
overflow: hidden;
}
// ========================================================
// = Overflow =
// ========================================================
&-selector {
width: 100%;
}
&-selection-overflow {
display: flex;
flex-wrap: wrap;
box-sizing: border-box;
width: 100%;
border: 1px solid green;
&-item {
flex: none;
max-width: 100%;
}
}
&-selection-item {
border: 1px solid blue;
}
&-multiple-input {
width: 10px;
opacity: 0.1;
}
}
@@ -0,0 +1,17 @@
/**
* Copyright 2023-present DreamNum Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export { DatePicker, type IDatePickerProps } from './DatePicker';
+1
View File
@@ -23,6 +23,7 @@ export { ColorPicker, type IColorPickerProps } from './components/color-picker';
export { ConfigContext, ConfigProvider, type IConfigProviderProps } from './components/config-provider';
export { Confirm, type IConfirmProps } from './components/confirm';
export { Container, type IContainerProps } from './components/container';
export { DatePicker, type IDatePickerProps } from './components/date-picker';
export { Dialog, type IDialogProps } from './components/dialog';
export { Dropdown, type IDropdownProps } from './components/dropdown';
export { FormLayout, type IFormLayoutProps } from './components/form-layout';
+6
View File
@@ -14,6 +14,8 @@
* limitations under the License.
*/
import PickerEnUs from 'rc-picker/lib/locale/en_US';
import dajsEnUS from 'dayjs/locale/en';
import type { ILocale } from './interface';
const locale: ILocale = {
@@ -25,6 +27,10 @@ const locale: ILocale = {
Slider: {
resetTo: 'Reset to',
},
Picker: {
...dajsEnUS,
...PickerEnUs,
},
},
};
+3
View File
@@ -14,9 +14,12 @@
* limitations under the License.
*/
import type PickerZhCN from 'rc-picker/lib/locale/zh_CN';
export interface ILocale {
design: {
Confirm: Record<string, any>;
Slider: Record<string, any>;
Picker: typeof PickerZhCN;
};
}
+6
View File
@@ -14,6 +14,8 @@
* limitations under the License.
*/
import PickerZhCN from 'rc-picker/lib/locale/zh_CN';
import dajsZhCN from 'dayjs/locale/zh';
import type { ILocale } from './interface';
const locale: ILocale = {
@@ -25,6 +27,10 @@ const locale: ILocale = {
Slider: {
resetTo: '恢复至',
},
Picker: {
...dajsZhCN,
...PickerZhCN,
},
},
};
+1 -1
View File
@@ -69,7 +69,7 @@
"@wendellhu/redi": "^0.13.0"
},
"devDependencies": {
"@types/react": "^18.2.57",
"@types/react": "^18.2.63",
"@univerjs/core": "workspace:*",
"@univerjs/design": "workspace:*",
"@univerjs/docs": "workspace:*",
+3 -3
View File
@@ -63,17 +63,17 @@
"peerDependencies": {
"@univerjs/core": "workspace:*",
"@univerjs/design": "workspace:*",
"@univerjs/icons": "^0.1.30",
"@univerjs/icons": "^0.1.39",
"@univerjs/ui": "workspace:*",
"@wendellhu/redi": "^0.13.0",
"react": "^18.2.0",
"rxjs": ">=7.0.0"
},
"dependencies": {
"@univerjs/icons": "^0.1.30"
"@univerjs/icons": "^0.1.39"
},
"devDependencies": {
"@types/react": "^18.2.57",
"@types/react": "^18.2.63",
"@univerjs/core": "workspace:*",
"@univerjs/design": "workspace:*",
"@univerjs/shared": "workspace:*",
+2 -2
View File
@@ -73,10 +73,10 @@
"rxjs": ">=7.0.0"
},
"dependencies": {
"@univerjs/icons": "^0.1.30"
"@univerjs/icons": "^0.1.39"
},
"devDependencies": {
"@types/react": "^18.2.57",
"@types/react": "^18.2.63",
"@univerjs/core": "workspace:*",
"@univerjs/design": "workspace:*",
"@univerjs/docs": "workspace:*",
+2 -2
View File
@@ -77,10 +77,10 @@
"rxjs": ">=7.0.0"
},
"dependencies": {
"@univerjs/icons": "^0.1.30"
"@univerjs/icons": "^0.1.39"
},
"devDependencies": {
"@types/react": "^18.2.57",
"@types/react": "^18.2.63",
"@univerjs/core": "workspace:*",
"@univerjs/design": "workspace:*",
"@univerjs/engine-formula": "workspace:*",
@@ -15,14 +15,16 @@
*/
import type { Meta, StoryObj } from '@storybook/react';
import { LocaleService, ThemeService } from '@univerjs/core';
import { LocaleService, LocaleType, ThemeService } from '@univerjs/core';
import type { Dependency } from '@wendellhu/redi';
import { Injector } from '@wendellhu/redi';
import { connectInjector } from '@wendellhu/redi/react-bindings';
import React, { useMemo } from 'react';
import { connectInjector, RediContext } from '@wendellhu/redi/react-bindings';
import React, { useContext, useMemo, useState } from 'react';
import { zhCN } from '../../locale';
import { enUS, zhCN } from '../../locale';
import type { ISheetNumfmtPanelProps } from '../index';
import { SheetNumfmtPanel } from '../index';
import { UserHabitController } from '../../controllers/user-habit.controller';
const Index = (props: any) => {
const inject = useMemo(() => new Injector([[LocaleService], [ThemeService]]), []);
@@ -37,7 +39,6 @@ const Index = (props: any) => {
};
const meta: Meta = {
title: 'numfmt',
component: Index,
parameters: {
layout: 'centered',
},
@@ -46,10 +47,33 @@ const meta: Meta = {
export default meta;
export const Test: StoryObj<ISheetNumfmtPanelProps> = {
args: {
value: { defaultPattern: '', defaultValue: 123123, row: 2, col: 3 },
onChange(pattern) {
// console.log(pattern);
},
render() {
const { injector } = useContext(RediContext);
const [inject] = useState(() => {
const deps: Dependency[] = [
[UserHabitController],
];
injector?.get(LocaleService).load({
[LocaleType.EN_US]: enUS,
[LocaleType.ZH_CN]: zhCN,
});
deps.forEach((dependency) => injector?.add(dependency));
return injector;
});
return (
<RediContext.Provider value={{ injector: inject }}>
<SheetNumfmtPanel
value={{ defaultPattern: '', defaultValue: 123123, row: 2, col: 3 }}
onChange={(pattern) => {
}}
/>
</RediContext.Provider>
);
},
};
+2 -2
View File
@@ -78,10 +78,10 @@
"rxjs": ">=7.0.0"
},
"dependencies": {
"@univerjs/icons": "^0.1.30"
"@univerjs/icons": "^0.1.39"
},
"devDependencies": {
"@types/react": "^18.2.57",
"@types/react": "^18.2.63",
"@univerjs/core": "workspace:*",
"@univerjs/design": "workspace:*",
"@univerjs/docs": "workspace:*",
+1 -1
View File
@@ -73,7 +73,7 @@
"rxjs": ">=7.0.0"
},
"dependencies": {
"@univerjs/icons": "^0.1.30"
"@univerjs/icons": "^0.1.39"
},
"devDependencies": {
"@univerjs/core": "workspace:*",
+1 -1
View File
@@ -67,7 +67,7 @@
"react": ">=16.9.0"
},
"devDependencies": {
"@types/react": "^18.2.57",
"@types/react": "^18.2.63",
"@univerjs/core": "workspace:*",
"@univerjs/design": "workspace:*",
"@univerjs/engine-render": "workspace:*",
+1 -1
View File
@@ -5,7 +5,7 @@
## Introduction
> UI plugin for Univer.
`@univerjs/ui` defines basic UI services and provides a set of desktop Workbench implementations based on React.
## Usage
+3 -3
View File
@@ -74,15 +74,15 @@
"rxjs": ">=7.0.0"
},
"dependencies": {
"@univerjs/icons": "^0.1.30",
"@univerjs/icons": "^0.1.39",
"localforage": "^1.10.0",
"rc-notification": "^5.3.0",
"rc-util": "^5.38.2"
},
"devDependencies": {
"@testing-library/react": "^14.2.1",
"@types/react": "^18.2.57",
"@types/react-dom": "^18.2.19",
"@types/react": "^18.2.63",
"@types/react-dom": "^18.2.20",
"@types/react-transition-group": "^4.4.10",
"@univerjs/core": "workspace:*",
"@univerjs/design": "workspace:*",
+1
View File
@@ -85,3 +85,4 @@ export { SetEditorResizeOperation } from './commands/operations/editor/set-edito
export { RangeSelector } from './components/range-selector/RangeSelector';
export { IRangeSelectorService } from './services/range-selector/range-selector.service';
export { DesktopLocalStorageService } from './services/local-storage/local-storage.service';
+1 -1
View File
@@ -75,7 +75,7 @@
"rxjs": ">=7.0.0"
},
"devDependencies": {
"@types/react": "^18.2.57",
"@types/react": "^18.2.63",
"@univerjs/core": "workspace:*",
"@univerjs/design": "workspace:*",
"@univerjs/facade": "workspace:*",
+258 -106
View File
@@ -115,7 +115,7 @@ importers:
version: 1.2.1(react@18.2.0)
'@storybook/addon-essentials':
specifier: 8.0.0-rc.1
version: 8.0.0-rc.1(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0)
version: 8.0.0-rc.1(@types/react@18.2.63)(react-dom@18.2.0)(react@18.2.0)
'@storybook/addon-interactions':
specifier: 8.0.0-rc.1
version: 8.0.0-rc.1
@@ -130,7 +130,7 @@ importers:
version: 1.0.1(webpack@5.90.3)
'@storybook/blocks':
specifier: 8.0.0-rc.1
version: 8.0.0-rc.1(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0)
version: 8.0.0-rc.1(@types/react@18.2.63)(react-dom@18.2.0)(react@18.2.0)
'@storybook/react':
specifier: 8.0.0-rc.1
version: 8.0.0-rc.1(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)
@@ -202,8 +202,8 @@ importers:
specifier: workspace:*
version: link:../packages/find-replace
'@univerjs/icons':
specifier: ^0.1.30
version: 0.1.30(react-dom@18.2.0)(react@18.2.0)
specifier: ^0.1.39
version: 0.1.39(react-dom@18.2.0)(react@18.2.0)
'@univerjs/rpc':
specifier: workspace:*
version: link:../packages/rpc
@@ -254,17 +254,17 @@ importers:
version: 18.2.0(react@18.2.0)
react-mosaic-component:
specifier: ^6.1.0
version: 6.1.0(@types/node@20.11.24)(@types/react@18.2.57)(dnd-core@16.0.1)(react-dom@18.2.0)(react@18.2.0)
version: 6.1.0(@types/node@20.11.24)(@types/react@18.2.63)(dnd-core@16.0.1)(react-dom@18.2.0)(react@18.2.0)
rxjs:
specifier: ^7.8.1
version: 7.8.1
devDependencies:
'@types/react':
specifier: ^18.2.57
version: 18.2.57
specifier: ^18.2.63
version: 18.2.63
'@types/react-dom':
specifier: ^18.2.19
version: 18.2.19
specifier: ^18.2.20
version: 18.2.20
'@univerjs/shared':
specifier: workspace:*
version: link:../common/shared
@@ -333,11 +333,14 @@ importers:
specifier: ^1.18.3
version: 1.18.3(react-dom@18.2.0)(react@18.2.0)
'@univerjs/icons':
specifier: ^0.1.30
version: 0.1.30(react-dom@18.2.0)(react@18.2.0)
specifier: ^0.1.39
version: 0.1.39(react-dom@18.2.0)(react@18.2.0)
dayjs:
specifier: '>=1.11.10'
version: 1.11.10
rc-dialog:
specifier: ^9.3.4
version: 9.3.4(react-dom@18.2.0)(react@18.2.0)
specifier: ^9.4.0
version: 9.4.0(react-dom@18.2.0)(react@18.2.0)
rc-dropdown:
specifier: ^4.1.0
version: 4.1.0(react-dom@18.2.0)(react@18.2.0)
@@ -350,15 +353,18 @@ importers:
rc-menu:
specifier: ^9.12.4
version: 9.12.4(react-dom@18.2.0)(react@18.2.0)
rc-picker:
specifier: ^4.2.0
version: 4.2.0(dayjs@1.11.10)(react-dom@18.2.0)(react@18.2.0)
rc-select:
specifier: ^14.11.0
version: 14.11.0(react-dom@18.2.0)(react@18.2.0)
specifier: ^14.12.0
version: 14.12.0(react-dom@18.2.0)(react@18.2.0)
rc-tooltip:
specifier: ^6.1.3
version: 6.1.3(react-dom@18.2.0)(react@18.2.0)
rc-util:
specifier: ^5.38.2
version: 5.38.2(react-dom@18.2.0)(react@18.2.0)
specifier: ^5.39.0
version: 5.39.0(react-dom@18.2.0)(react@18.2.0)
react-draggable:
specifier: ^4.4.6
version: 4.4.6(react-dom@18.2.0)(react@18.2.0)
@@ -370,11 +376,11 @@ importers:
specifier: ^14.2.1
version: 14.2.1(react-dom@18.2.0)(react@18.2.0)
'@types/react':
specifier: ^18.2.57
version: 18.2.57
specifier: ^18.2.63
version: 18.2.63
'@types/react-dom':
specifier: ^18.2.19
version: 18.2.19
specifier: ^18.2.20
version: 18.2.20
'@types/react-transition-group':
specifier: ^4.4.10
version: 4.4.10
@@ -439,8 +445,8 @@ importers:
packages/docs-ui:
devDependencies:
'@types/react':
specifier: ^18.2.57
version: 18.2.57
specifier: ^18.2.63
version: 18.2.63
'@univerjs/core':
specifier: workspace:*
version: link:../core
@@ -610,12 +616,12 @@ importers:
packages/find-replace:
dependencies:
'@univerjs/icons':
specifier: ^0.1.30
version: 0.1.30(react-dom@18.2.0)(react@18.2.0)
specifier: ^0.1.39
version: 0.1.39(react-dom@18.2.0)(react@18.2.0)
devDependencies:
'@types/react':
specifier: ^18.2.57
version: 18.2.57
specifier: ^18.2.63
version: 18.2.63
'@univerjs/core':
specifier: workspace:*
version: link:../core
@@ -764,12 +770,12 @@ importers:
packages/sheets-formula:
dependencies:
'@univerjs/icons':
specifier: ^0.1.30
version: 0.1.30(react-dom@18.2.0)(react@18.2.0)
specifier: ^0.1.39
version: 0.1.39(react-dom@18.2.0)(react@18.2.0)
devDependencies:
'@types/react':
specifier: ^18.2.57
version: 18.2.57
specifier: ^18.2.63
version: 18.2.63
'@univerjs/core':
specifier: workspace:*
version: link:../core
@@ -828,12 +834,12 @@ importers:
packages/sheets-numfmt:
dependencies:
'@univerjs/icons':
specifier: ^0.1.30
version: 0.1.30(react-dom@18.2.0)(react@18.2.0)
specifier: ^0.1.39
version: 0.1.39(react-dom@18.2.0)(react@18.2.0)
devDependencies:
'@types/react':
specifier: ^18.2.57
version: 18.2.57
specifier: ^18.2.63
version: 18.2.63
'@univerjs/core':
specifier: workspace:*
version: link:../core
@@ -886,12 +892,12 @@ importers:
packages/sheets-ui:
dependencies:
'@univerjs/icons':
specifier: ^0.1.30
version: 0.1.30(react-dom@18.2.0)(react@18.2.0)
specifier: ^0.1.39
version: 0.1.39(react-dom@18.2.0)(react@18.2.0)
devDependencies:
'@types/react':
specifier: ^18.2.57
version: 18.2.57
specifier: ^18.2.63
version: 18.2.63
'@univerjs/core':
specifier: workspace:*
version: link:../core
@@ -947,8 +953,8 @@ importers:
packages/sheets-zen-editor:
dependencies:
'@univerjs/icons':
specifier: ^0.1.30
version: 0.1.30(react-dom@18.2.0)(react@18.2.0)
specifier: ^0.1.39
version: 0.1.39(react-dom@18.2.0)(react@18.2.0)
devDependencies:
'@univerjs/core':
specifier: workspace:*
@@ -1030,8 +1036,8 @@ importers:
packages/slides-ui:
devDependencies:
'@types/react':
specifier: ^18.2.57
version: 18.2.57
specifier: ^18.2.63
version: 18.2.63
'@univerjs/core':
specifier: workspace:*
version: link:../core
@@ -1072,8 +1078,8 @@ importers:
packages/ui:
dependencies:
'@univerjs/icons':
specifier: ^0.1.30
version: 0.1.30(react-dom@18.2.0)(react@18.2.0)
specifier: ^0.1.39
version: 0.1.39(react-dom@18.2.0)(react@18.2.0)
localforage:
specifier: ^1.10.0
version: 1.10.0
@@ -1088,11 +1094,11 @@ importers:
specifier: ^14.2.1
version: 14.2.1(react-dom@18.2.0)(react@18.2.0)
'@types/react':
specifier: ^18.2.57
version: 18.2.57
specifier: ^18.2.63
version: 18.2.63
'@types/react-dom':
specifier: ^18.2.19
version: 18.2.19
specifier: ^18.2.20
version: 18.2.20
'@types/react-transition-group':
specifier: ^4.4.10
version: 4.4.10
@@ -1146,8 +1152,8 @@ importers:
version: 18.2.0
devDependencies:
'@types/react':
specifier: ^18.2.57
version: 18.2.57
specifier: ^18.2.63
version: 18.2.63
'@univerjs/core':
specifier: workspace:*
version: link:../core
@@ -3492,14 +3498,14 @@ packages:
call-bind: 1.0.7
dev: true
/@mdx-js/react@3.0.1(@types/react@18.2.61)(react@18.2.0):
/@mdx-js/react@3.0.1(@types/react@18.2.63)(react@18.2.0):
resolution: {integrity: sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==}
peerDependencies:
'@types/react': '>=16'
react: '>=16'
dependencies:
'@types/mdx': 2.0.11
'@types/react': 18.2.61
'@types/react': 18.2.63
react: 18.2.0
dev: false
@@ -3715,7 +3721,7 @@ packages:
config-chain: 1.1.13
dev: true
/@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.61)(react@18.2.0):
/@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.63)(react@18.2.0):
resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==}
peerDependencies:
'@types/react': '*'
@@ -3725,11 +3731,11 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.9
'@types/react': 18.2.61
'@types/react': 18.2.63
react: 18.2.0
dev: false
/@radix-ui/react-slot@1.0.2(@types/react@18.2.61)(react@18.2.0):
/@radix-ui/react-slot@1.0.2(@types/react@18.2.63)(react@18.2.0):
resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==}
peerDependencies:
'@types/react': '*'
@@ -3739,8 +3745,8 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.9
'@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.61)(react@18.2.0)
'@types/react': 18.2.61
'@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.63)(react@18.2.0)
'@types/react': 18.2.63
react: 18.2.0
dev: false
@@ -3753,7 +3759,7 @@ packages:
'@babel/runtime': 7.23.9
'@ctrl/tinycolor': 3.6.1
classnames: 2.5.1
rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.39.0(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
@@ -3774,7 +3780,7 @@ packages:
dependencies:
'@babel/runtime': 7.23.9
classnames: 2.5.1
rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.39.0(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
@@ -3791,7 +3797,7 @@ packages:
classnames: 2.5.1
rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0)
rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.39.0(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
@@ -4008,10 +4014,10 @@ packages:
ts-dedent: 2.2.0
dev: false
/@storybook/addon-controls@8.0.0-rc.1(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0):
/@storybook/addon-controls@8.0.0-rc.1(@types/react@18.2.63)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-Yat3OuFbhxD2vjEhT1NxiiKNuGxPUKvlSRgBxlD++8XuWKm6HFeGh2R3OwIndaYvsbpzrV8F4GKM4NYrCaONfQ==}
dependencies:
'@storybook/blocks': 8.0.0-rc.1(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0)
'@storybook/blocks': 8.0.0-rc.1(@types/react@18.2.63)(react-dom@18.2.0)(react@18.2.0)
lodash: 4.17.21
ts-dedent: 2.2.0
transitivePeerDependencies:
@@ -4026,10 +4032,10 @@ packages:
resolution: {integrity: sha512-oDktwaXuDUV+laLg6BB4mEXdncAHyHeePO9eE0t0lqxU50qkqxQ1OJqafyM1Cbrt/8SNVFlvd+XYKaZCLPyW5w==}
dependencies:
'@babel/core': 7.23.9
'@mdx-js/react': 3.0.1(@types/react@18.2.61)(react@18.2.0)
'@storybook/blocks': 8.0.0-rc.1(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0)
'@mdx-js/react': 3.0.1(@types/react@18.2.63)(react@18.2.0)
'@storybook/blocks': 8.0.0-rc.1(@types/react@18.2.63)(react-dom@18.2.0)(react@18.2.0)
'@storybook/client-logger': 8.0.0-rc.1
'@storybook/components': 8.0.0-rc.1(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0)
'@storybook/components': 8.0.0-rc.1(@types/react@18.2.63)(react-dom@18.2.0)(react@18.2.0)
'@storybook/csf-plugin': 8.0.0-rc.1
'@storybook/csf-tools': 8.0.0-rc.1
'@storybook/global': 5.0.0
@@ -4038,7 +4044,7 @@ packages:
'@storybook/react-dom-shim': 8.0.0-rc.1(react-dom@18.2.0)(react@18.2.0)
'@storybook/theming': 8.0.0-rc.1(react-dom@18.2.0)(react@18.2.0)
'@storybook/types': 8.0.0-rc.1
'@types/react': 18.2.61
'@types/react': 18.2.63
fs-extra: 11.2.0
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
@@ -4050,12 +4056,12 @@ packages:
- supports-color
dev: false
/@storybook/addon-essentials@8.0.0-rc.1(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0):
/@storybook/addon-essentials@8.0.0-rc.1(@types/react@18.2.63)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-HgzsK9TRncn7MJ6QZBJGWyhcpyll3UEMknSenX9e5HYSd4npMFyqi6EAFPYQTBtjqEHsjdeRzGiuSX64a9UBLQ==}
dependencies:
'@storybook/addon-actions': 8.0.0-rc.1
'@storybook/addon-backgrounds': 8.0.0-rc.1
'@storybook/addon-controls': 8.0.0-rc.1(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0)
'@storybook/addon-controls': 8.0.0-rc.1(@types/react@18.2.63)(react-dom@18.2.0)(react@18.2.0)
'@storybook/addon-docs': 8.0.0-rc.1
'@storybook/addon-highlight': 8.0.0-rc.1
'@storybook/addon-measure': 8.0.0-rc.1
@@ -4142,7 +4148,7 @@ packages:
resolution: {integrity: sha512-5HGgegON/aBu/tDM3IFyEAZfaMmG98Y0OI48kkkc9EipfQRMIrYFizbCjV7388H98wM81TqTEqvzxYpFkPSphg==}
engines: {node: '>=18'}
dependencies:
'@storybook/core-common': 8.0.0-rc.1
'@storybook/core-common': 8.0.0-rc.2
'@swc/core': 1.4.2
swc-loader: 0.2.6(@swc/core@1.4.2)(webpack@5.90.3)
transitivePeerDependencies:
@@ -4152,7 +4158,7 @@ packages:
- webpack
dev: false
/@storybook/blocks@8.0.0-rc.1(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0):
/@storybook/blocks@8.0.0-rc.1(@types/react@18.2.63)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-AkFJPxetXgcVWyv2KyNud/za8p+UnHdMSnDXeEl9TEnh13A3pxby0ogOghIbtb28pW4yagc9rigpAeR71lQJMA==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -4165,7 +4171,7 @@ packages:
dependencies:
'@storybook/channels': 8.0.0-rc.1
'@storybook/client-logger': 8.0.0-rc.1
'@storybook/components': 8.0.0-rc.1(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0)
'@storybook/components': 8.0.0-rc.1(@types/react@18.2.63)(react-dom@18.2.0)(react@18.2.0)
'@storybook/core-events': 8.0.0-rc.1
'@storybook/csf': 0.1.2
'@storybook/docs-tools': 8.0.0-rc.1
@@ -4291,6 +4297,17 @@ packages:
telejson: 7.2.0
tiny-invariant: 1.3.1
/@storybook/channels@8.0.0-rc.2:
resolution: {integrity: sha512-Gb7lVLKPHpdCGNMvAF4Zrr5QNrjlRgDXTC1AxjfJtJcZw4BsCfmLiPbQVltCrIFHgtPbxXB20gCCtYcE4M6k7Q==}
dependencies:
'@storybook/client-logger': 8.0.0-rc.2
'@storybook/core-events': 8.0.0-rc.2
'@storybook/global': 5.0.0
qs: 6.11.2
telejson: 7.2.0
tiny-invariant: 1.3.3
dev: false
/@storybook/cli@8.0.0-rc.1(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-B7XebUK63lhScJO+U9XNA3y98MYR4K98zkijYkH3xe5eKjd17aa4hr1VszmKJbsgs8dzP0ZZpcp5MlKrCKZR+w==}
hasBin: true
@@ -4352,6 +4369,12 @@ packages:
dependencies:
'@storybook/global': 5.0.0
/@storybook/client-logger@8.0.0-rc.2:
resolution: {integrity: sha512-T5HhSJUDnOKhpgPiogCEGvW9KATVWfKDBlDbh0/MBmVBR0tqGpFVLefGAM7wmRoVg3MVIeQRRtzMv02PYFxJDg==}
dependencies:
'@storybook/global': 5.0.0
dev: false
/@storybook/codemod@8.0.0-rc.1:
resolution: {integrity: sha512-5GDCci06/lddHZo9Bxq488p0BuQpu6IFQ1J1/QRgbrNMJcPFv+D7B9nwtgQ+cdi3XNzc7RuMJLjMyyCf2entGw==}
dependencies:
@@ -4374,13 +4397,13 @@ packages:
- supports-color
dev: false
/@storybook/components@8.0.0-rc.1(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0):
/@storybook/components@8.0.0-rc.1(@types/react@18.2.63)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-yOL/m3s/uhjhMgy0FdjQZFDn3FOcbx9R0SA0ba07RLJ9qKQU6Ece5yg25Xp+kvAz643EwNr0HcpyfIvCMj0U7w==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
dependencies:
'@radix-ui/react-slot': 1.0.2(@types/react@18.2.61)(react@18.2.0)
'@radix-ui/react-slot': 1.0.2(@types/react@18.2.63)(react@18.2.0)
'@storybook/client-logger': 8.0.0-rc.1
'@storybook/csf': 0.1.2
'@storybook/global': 5.0.0
@@ -4430,6 +4453,42 @@ packages:
- encoding
- supports-color
/@storybook/core-common@8.0.0-rc.2:
resolution: {integrity: sha512-31B/kUzpH/TP3yVmv3g5UlnuJ0rR7dBPIB5qaKsDx/ygpG9sm4xhXFHGZWU8Nqshu2MREuPQYI2UPELF+luUug==}
dependencies:
'@storybook/core-events': 8.0.0-rc.2
'@storybook/csf-tools': 8.0.0-rc.2
'@storybook/node-logger': 8.0.0-rc.2
'@storybook/types': 8.0.0-rc.2
'@yarnpkg/fslib': 2.10.3
'@yarnpkg/libzip': 2.3.0
chalk: 4.1.2
cross-spawn: 7.0.3
esbuild: 0.18.20
esbuild-register: 3.5.0(esbuild@0.18.20)
execa: 5.1.1
file-system-cache: 2.3.0
find-cache-dir: 3.3.2
find-up: 5.0.0
fs-extra: 11.2.0
glob: 10.3.10
handlebars: 4.7.8
lazy-universal-dotenv: 4.0.0
node-fetch: 2.7.0
picomatch: 2.3.1
pkg-dir: 5.0.0
pretty-hrtime: 1.0.3
resolve-from: 5.0.0
semver: 7.6.0
tempy: 1.0.1
tiny-invariant: 1.3.3
ts-dedent: 2.2.0
util: 0.12.5
transitivePeerDependencies:
- encoding
- supports-color
dev: false
/@storybook/core-events@7.6.17:
resolution: {integrity: sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==}
dependencies:
@@ -4441,6 +4500,12 @@ packages:
dependencies:
ts-dedent: 2.2.0
/@storybook/core-events@8.0.0-rc.2:
resolution: {integrity: sha512-SQ/vcAbRJCuywQDiBsKZDXRbqbTEcQQlDOdzoDtV9jjfPhcIShB4BMhUmoTkR5OJAImHmTYm5gOXvYMXo97IEQ==}
dependencies:
ts-dedent: 2.2.0
dev: false
/@storybook/core-server@8.0.0-rc.1(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-q5wgVPJS7i+lN0lpDvxrzICkw1ewGYgbpWlvp9bShObHctH2oPjjAAEB1DdyFLCPDmkokyygpM/iBBWW3oP3Pw==}
dependencies:
@@ -4533,6 +4598,22 @@ packages:
transitivePeerDependencies:
- supports-color
/@storybook/csf-tools@8.0.0-rc.2:
resolution: {integrity: sha512-IwYQEwXvm3P1DzDPzxhcqQ+xcoLj6DGfgQaHLeIrmmUtpVEA8am5mAgqfKUqd55RuaBYFh78qfTLMEL3dJBSBw==}
dependencies:
'@babel/generator': 7.23.6
'@babel/parser': 7.23.9
'@babel/traverse': 7.23.9
'@babel/types': 7.23.9
'@storybook/csf': 0.1.2
'@storybook/types': 8.0.0-rc.2
fs-extra: 11.2.0
recast: 0.23.5
ts-dedent: 2.2.0
transitivePeerDependencies:
- supports-color
dev: false
/@storybook/csf@0.1.2:
resolution: {integrity: sha512-ePrvE/pS1vsKR9Xr+o+YwdqNgHUyXvg+1Xjx0h9LrVx7Zq4zNe06pd63F5EvzTbCbJsHj7GHr9tkiaqm7U8WRA==}
dependencies:
@@ -4603,6 +4684,10 @@ packages:
/@storybook/node-logger@8.0.0-rc.1:
resolution: {integrity: sha512-WFIK9NRclmSepPsTmVOcxzVGv/yyjAckiL3Z/iV2idwP4Qj/TT/FGFGAPs7oGSiQfgP80FMifDFN6tcZ0awpYQ==}
/@storybook/node-logger@8.0.0-rc.2:
resolution: {integrity: sha512-jL2bF9BkD9kNELlt5zW1fTB6OI3Ue47ob8j6AtgeB32FW1idheycRzzGCNgZTVBhcKsdSIIg5D49cTadpjJHbQ==}
dev: false
/@storybook/preset-react-webpack@8.0.0-rc.1(@swc/core@1.4.2)(esbuild@0.18.20)(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3):
resolution: {integrity: sha512-LbxngVsSAAKjMd4AtYROiLyaJ8tk22EuOIEPQ5r+dpcv92nTWLc7NHe83LrWAvxKizb0G1+T5QLLK7ZOjSKvKA==}
engines: {node: '>=18.0.0'}
@@ -4815,6 +4900,14 @@ packages:
'@types/express': 4.17.21
file-system-cache: 2.3.0
/@storybook/types@8.0.0-rc.2:
resolution: {integrity: sha512-xzj7l/54hPMLLxT3CyBJhCNSpfPNpyxsStNEb9zTSZXTu4xxRTPy09oJ1psSpJeMcG71bTAo6ElPxMVvBENP4w==}
dependencies:
'@storybook/channels': 8.0.0-rc.2
'@types/express': 4.17.21
file-system-cache: 2.3.0
dev: false
/@stylistic/eslint-plugin-js@1.6.2(eslint@8.57.0):
resolution: {integrity: sha512-ndT6X2KgWGxv8101pdMOxL8pihlYIHcOv3ICd70cgaJ9exwkPn8hJj4YQwslxoAlre1TFHnXd/G1/hYXgDrjIA==}
engines: {node: ^16.0.0 || >=18.0.0}
@@ -5040,7 +5133,7 @@ packages:
dependencies:
'@babel/runtime': 7.23.9
'@testing-library/dom': 9.3.4
'@types/react-dom': 18.2.19
'@types/react-dom': 18.2.20
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: true
@@ -5263,27 +5356,28 @@ packages:
/@types/range-parser@1.2.7:
resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
/@types/react-dom@18.2.19:
resolution: {integrity: sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==}
/@types/react-dom@18.2.20:
resolution: {integrity: sha512-HXN/biJY8nv20Cn9ZbCFq3liERd4CozVZmKbaiZ9KiKTrWqsP7eoGDO6OOGvJQwoVFuiXaiJ7nBBjiFFbRmQMQ==}
dependencies:
'@types/react': 18.2.57
'@types/react': 18.2.63
dev: true
/@types/react-transition-group@4.4.10:
resolution: {integrity: sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==}
dependencies:
'@types/react': 18.2.57
'@types/react': 18.2.63
dev: true
/@types/react@18.2.57:
resolution: {integrity: sha512-ZvQsktJgSYrQiMirAN60y4O/LRevIV8hUzSOSNB6gfR3/o3wCBFQx3sPwIYtuDMeiVgsSS3UzCV26tEzgnfvQw==}
/@types/react@18.2.61:
resolution: {integrity: sha512-NURTN0qNnJa7O/k4XUkEW2yfygA+NxS0V5h1+kp9jPwhzZy95q3ADoGMP0+JypMhrZBTTgjKAUlTctde1zzeQA==}
dependencies:
'@types/prop-types': 15.7.11
'@types/scheduler': 0.16.8
csstype: 3.1.3
dev: true
/@types/react@18.2.61:
resolution: {integrity: sha512-NURTN0qNnJa7O/k4XUkEW2yfygA+NxS0V5h1+kp9jPwhzZy95q3ADoGMP0+JypMhrZBTTgjKAUlTctde1zzeQA==}
/@types/react@18.2.63:
resolution: {integrity: sha512-ppaqODhs15PYL2nGUOaOu2RSCCB4Difu4UFrP4I3NHLloXC/ESQzQMi9nvjfT1+rudd0d2L3fQPJxRSey+rGlQ==}
dependencies:
'@types/prop-types': 15.7.11
'@types/scheduler': 0.16.8
@@ -5545,8 +5639,8 @@ packages:
/@ungap/structured-clone@1.2.0:
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
/@univerjs/icons@0.1.30(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-TdI4MuVH6zkbeLXllrkVemilQ+MnTm7PJLwaQQXyuwl+YSuoe4m5S5nc6iE/CXzx7Zp5Nyhv1rsXetpXWcgEpA==}
/@univerjs/icons@0.1.39(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-LlvMLjF18VM1KKLybMpCEnetnyvQgb5ZvJA0HeWRnTNO8HFXlEpCJmXpAIajNGL+PjtZU4LTj3tMf/2C6prn/w==}
peerDependencies:
react: '*'
react-dom: '*'
@@ -11569,8 +11663,8 @@ packages:
unpipe: 1.0.0
dev: false
/rc-dialog@9.3.4(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-975X3018GhR+EjZFbxA2Z57SX5rnu0G0/OxFgMMvZK4/hQWEm3MHaNvP4wXpxYDoJsp+xUvVW+GB9CMMCm81jA==}
/rc-dialog@9.4.0(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-AScCexaLACvf8KZRqCPz12BJ8olszXOS4lKlkMyzDQHS1m0zj1KZMYgmMCh39ee0Dcv8kyrj8mTqxuLyhH+QuQ==}
peerDependencies:
react: '>=16.9.0'
react-dom: '>=16.9.0'
@@ -11579,7 +11673,7 @@ packages:
'@rc-component/portal': 1.1.2(react-dom@18.2.0)(react@18.2.0)
classnames: 2.5.1
rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.39.0(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
@@ -11593,7 +11687,7 @@ packages:
'@babel/runtime': 7.23.9
'@rc-component/trigger': 1.18.3(react-dom@18.2.0)(react@18.2.0)
classnames: 2.5.1
rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.39.0(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
@@ -11608,7 +11702,7 @@ packages:
'@rc-component/mini-decimal': 1.1.0
classnames: 2.5.1
rc-input: 1.4.3(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.39.0(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
@@ -11621,7 +11715,7 @@ packages:
dependencies:
'@babel/runtime': 7.23.9
classnames: 2.5.1
rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.39.0(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
@@ -11637,7 +11731,7 @@ packages:
classnames: 2.5.1
rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0)
rc-overflow: 1.3.2(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.39.0(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
@@ -11650,7 +11744,7 @@ packages:
dependencies:
'@babel/runtime': 7.23.9
classnames: 2.5.1
rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.39.0(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
@@ -11665,7 +11759,7 @@ packages:
'@babel/runtime': 7.23.9
classnames: 2.5.1
rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.39.0(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
@@ -11679,7 +11773,38 @@ packages:
'@babel/runtime': 7.23.9
classnames: 2.5.1
rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.39.0(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
/rc-picker@4.2.0(dayjs@1.11.10)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-4a5Gv9UtxDMGhqzJPDDAfXni6DGReqyHI4nu7e3nPrHsuTLH13lL1ykqIXqJ25f5ZqqyjpnMeogU1F4aaOdwhA==}
engines: {node: '>=8.x'}
peerDependencies:
date-fns: '>= 2.x'
dayjs: '>= 1.x'
luxon: '>= 3.x'
moment: '>= 2.x'
react: '>=16.9.0'
react-dom: '>=16.9.0'
peerDependenciesMeta:
date-fns:
optional: true
dayjs:
optional: true
luxon:
optional: true
moment:
optional: true
dependencies:
'@babel/runtime': 7.23.9
'@rc-component/trigger': 1.18.3(react-dom@18.2.0)(react@18.2.0)
classnames: 2.5.1
dayjs: 1.11.10
rc-overflow: 1.3.2(react-dom@18.2.0)(react@18.2.0)
rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.39.0(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
@@ -11692,14 +11817,14 @@ packages:
dependencies:
'@babel/runtime': 7.23.9
classnames: 2.5.1
rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.39.0(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
resize-observer-polyfill: 1.5.1
dev: false
/rc-select@14.11.0(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-8J8G/7duaGjFiTXCBLWfh5P+KDWyA3KTlZDfV3xj/asMPqB2cmxfM+lH50wRiPIRsCQ6EbkCFBccPuaje3DHIg==}
/rc-select@14.12.0(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-DJgL3pZGjoLOhV1IL8MUSyiZW+yLf/ArMvxZK8ES5HUadfAP2i5uPcaex9nGdX+MMk9iQ0iFTdMwwNt0ufNlqQ==}
engines: {node: '>=8.x'}
peerDependencies:
react: '*'
@@ -11710,7 +11835,7 @@ packages:
classnames: 2.5.1
rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0)
rc-overflow: 1.3.2(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.39.0(react-dom@18.2.0)(react@18.2.0)
rc-virtual-list: 3.11.4(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
@@ -11741,6 +11866,18 @@ packages:
react-is: 18.2.0
dev: false
/rc-util@5.39.0(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-fEVbkOApBUK/lg+NTkfC3fw336EhgRy531ly2QvZj8G+21OjPEzb9TtH/zfKDL2BuQqbGh8J5zXeFyfcELXOlQ==}
peerDependencies:
react: '>=16.9.0'
react-dom: '>=16.9.0'
dependencies:
'@babel/runtime': 7.23.9
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
react-is: 18.2.0
dev: false
/rc-virtual-list@3.11.4(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-NbBi0fvyIu26gP69nQBiWgUMTPX3mr4FcuBQiVqagU0BnuX8WQkiivnMs105JROeuUIFczLrlgUhLQwTWV1XDA==}
engines: {node: '>=8.x'}
@@ -11751,7 +11888,7 @@ packages:
'@babel/runtime': 7.23.9
classnames: 2.5.1
rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.38.2(react-dom@18.2.0)(react@18.2.0)
rc-util: 5.39.0(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
@@ -11813,7 +11950,7 @@ packages:
dnd-core: 16.0.1
dnd-multi-backend: 8.0.3(dnd-core@16.0.1)
react: 18.2.0
react-dnd: 16.0.1(@types/node@20.11.24)(@types/react@18.2.57)(react@18.2.0)
react-dnd: 16.0.1(@types/node@20.11.24)(@types/react@18.2.63)(react@18.2.0)
react-dnd-preview: 8.0.3(react-dnd@16.0.1)(react@18.2.0)
react-dom: 18.2.0(react@18.2.0)
dev: false
@@ -11825,7 +11962,7 @@ packages:
react-dnd: ^16.0.1
dependencies:
react: 18.2.0
react-dnd: 16.0.1(@types/node@20.11.24)(@types/react@18.2.57)(react@18.2.0)
react-dnd: 16.0.1(@types/node@20.11.24)(@types/react@18.2.63)(react@18.2.0)
dev: false
/react-dnd-touch-backend@16.0.1:
@@ -11835,7 +11972,7 @@ packages:
dnd-core: 16.0.1
dev: false
/react-dnd@16.0.1(@types/node@20.11.24)(@types/react@18.2.57)(react@18.2.0):
/react-dnd@16.0.1(@types/node@20.11.24)(@types/react@18.2.63)(react@18.2.0):
resolution: {integrity: sha512-QeoM/i73HHu2XF9aKksIUuamHPDvRglEwdHL4jsp784BgUuWcg6mzfxT0QDdQz8Wj0qyRKx2eMg8iZtWvU4E2Q==}
peerDependencies:
'@types/hoist-non-react-statics': '>= 3.3.1'
@@ -11853,7 +11990,7 @@ packages:
'@react-dnd/invariant': 4.0.2
'@react-dnd/shallowequal': 4.0.2
'@types/node': 20.11.24
'@types/react': 18.2.57
'@types/react': 18.2.63
dnd-core: 16.0.1
fast-deep-equal: 3.1.3
hoist-non-react-statics: 3.3.2
@@ -11932,7 +12069,7 @@ packages:
/react-is@18.2.0:
resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
/react-mosaic-component@6.1.0(@types/node@20.11.24)(@types/react@18.2.57)(dnd-core@16.0.1)(react-dom@18.2.0)(react@18.2.0):
/react-mosaic-component@6.1.0(@types/node@20.11.24)(@types/react@18.2.63)(dnd-core@16.0.1)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-iWrNUSdW6HK9SB6kaj7/auvIGZWlyEFR8ulQKC9lskY047uluo5ur4fiuZTNroUTZvGqL02AiLzBBj1+et8RZA==}
peerDependencies:
react: 16 - 18
@@ -11943,7 +12080,7 @@ packages:
prop-types: 15.8.1
rdndmb-html5-to-touch: 8.0.3(dnd-core@16.0.1)
react: 18.2.0
react-dnd: 16.0.1(@types/node@20.11.24)(@types/react@18.2.57)(react@18.2.0)
react-dnd: 16.0.1(@types/node@20.11.24)(@types/react@18.2.63)(react@18.2.0)
react-dnd-html5-backend: 16.0.1
react-dnd-multi-backend: 8.0.3(dnd-core@16.0.1)(react-dnd@16.0.1)(react-dom@18.2.0)(react@18.2.0)
react-dnd-touch-backend: 16.0.1
@@ -12052,6 +12189,17 @@ packages:
source-map: 0.6.1
tslib: 2.6.2
/recast@0.23.5:
resolution: {integrity: sha512-M67zIddJiwXdfPQRYKJ0qZO1SLdH1I0hYeb0wzxA+pNOvAZiQHulWzuk+fYsEWRQ8VfZrgjyucqsCOtCyM01/A==}
engines: {node: '>= 4'}
dependencies:
ast-types: 0.16.1
esprima: 4.0.1
source-map: 0.6.1
tiny-invariant: 1.3.3
tslib: 2.6.2
dev: false
/rechoir@0.6.2:
resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==}
engines: {node: '>= 0.10'}
@@ -13105,6 +13253,10 @@ packages:
/tiny-invariant@1.3.1:
resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==}
/tiny-invariant@1.3.3:
resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
dev: false
/tinybench@2.6.0:
resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==}