├── .gitignore ├── .prettierrc ├── README.md ├── package-lock.json ├── package.json ├── src ├── app │ ├── AppState.ts │ ├── Environment.tsx │ ├── StateMachine.ts │ ├── components │ │ └── App.tsx │ ├── helpers │ │ ├── shallowEqual.ts │ │ └── uniqueId.ts │ ├── hooks │ │ └── useRefCurrent.ts │ ├── index.css │ ├── index.html │ └── index.tsx └── tools │ ├── build.ts │ ├── deploy.ts │ ├── path.ts │ └── server.ts ├── tsconfig.json └── website ├── index.css ├── index.html └── index.js /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | *.log 4 | build 5 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "useTabs": true, 4 | "trailingComma": "es5" 5 | } 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Notion like Table Editor [Live Demo](https://tanvirraj.github.io/table-editor/) 2 | 3 | A Toy Project like Notion Table Editor. 4 | 5 | **Features** 6 | 7 | - React 8 | - [Estrella](https://github.com/rsms/estrella) (combines ESBuild with TypeScript) 9 | - Livereload (development server) 10 | - Deploy to Github Pages 11 | - Environment and StateMachine architecture (if you want) 12 | 13 | ## Development 14 | 15 | ```sh 16 | git clone git@github.com:ccorcos/typescript-boilerplate.git project 17 | cd project 18 | git remote remove origin 19 | npm install 20 | npm start 21 | ``` 22 | 23 | ## Deploy 24 | 25 | ```sh 26 | # Note: this will build and commit changes to your local branch. 27 | npm run release 28 | ``` 29 | 30 | ## Architecture 31 | 32 | - No side-effects at the top level except for index.tsx. 33 | - External effects interface through services defined on the Environment. 34 | - The Environment is plumbed around everywhere. 35 | - StateMachine is a Redux-style state management abstraction with less boilerplate. 36 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "typescript-boilerplate", 3 | "version": "1.0.22", 4 | "description": "boilerplate for web applications using typescript and webpack", 5 | "main": "index.js", 6 | "scripts": { 7 | "watch": "ts-node -T src/tools/build.ts --watch", 8 | "server": "ts-node -T src/tools/server.ts", 9 | "start": "run-p watch server", 10 | "clean": "rm -rf build", 11 | "build": "ts-node -T src/tools/build.ts", 12 | "deploy": "ts-node -T src/tools/deploy.ts", 13 | "release": "run-s clean build deploy" 14 | }, 15 | "keywords": [], 16 | "author": "", 17 | "license": "MIT", 18 | "dependencies": { 19 | "lodash": "^4.17.21", 20 | "react": "^17.0.2", 21 | "react-dom": "^17.0.2" 22 | }, 23 | "devDependencies": { 24 | "@types/express": "^4.17.13", 25 | "@types/livereload": "^0.9.1", 26 | "@types/lodash": "^4.14.172", 27 | "@types/node": "^16.9.1", 28 | "@types/react": "^17.0.21", 29 | "@types/react-dom": "^17.0.9", 30 | "connect-livereload": "^0.6.1", 31 | "cpx": "^1.5.0", 32 | "estrella": "^1.4.1", 33 | "express": "^4.17.1", 34 | "livereload": "^0.9.3", 35 | "npm-run-all": "^4.1.5", 36 | "ts-node": "^10.2.1", 37 | "typescript": "^4.4.3" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/app/AppState.ts: -------------------------------------------------------------------------------- 1 | import { useEffect, useMemo, useState } from "react" 2 | import { useEnvironment } from "./Environment" 3 | import { shallowEqual } from "./helpers/shallowEqual" 4 | import { useRefCurrent } from "./hooks/useRefCurrent" 5 | import { StateMachine } from "./StateMachine" 6 | import { cloneDeep } from "lodash" 7 | 8 | const initialTableData = [ 9 | ["Chet ", "Coros"], 10 | ["Tanvir", "Raj"], 11 | ["", ""], 12 | ] 13 | 14 | const tableState = { 15 | tableData: initialTableData, 16 | 17 | lastColumnIndex: Number(initialTableData[0].length - 1), 18 | lastRowIndex: Number(initialTableData.length - 1), 19 | 20 | showAddColumnButton: false, 21 | showAddRowButton: false, 22 | } 23 | 24 | export type TableData = typeof tableState 25 | 26 | export function newTableData(): TableData { 27 | return tableState 28 | } 29 | 30 | const reducers = { 31 | getTableCellIndexOnHover( 32 | tableDatabase: TableData, 33 | columnIndex: number, 34 | rowIndex: number 35 | ) { 36 | if ( 37 | tableDatabase.lastColumnIndex === columnIndex && 38 | tableDatabase.lastRowIndex === rowIndex 39 | ) { 40 | return { 41 | ...tableDatabase, 42 | showAddColumnButton: true, 43 | showAddRowButton: true, 44 | } 45 | } else if ( 46 | tableDatabase.lastColumnIndex !== columnIndex && 47 | tableDatabase.lastRowIndex === rowIndex 48 | ) { 49 | return { 50 | ...tableDatabase, 51 | showAddColumnButton: false, 52 | showAddRowButton: true, 53 | } 54 | } else if ( 55 | tableDatabase.lastColumnIndex === columnIndex && 56 | tableDatabase.lastRowIndex !== rowIndex 57 | ) { 58 | return { 59 | ...tableDatabase, 60 | showAddColumnButton: true, 61 | showAddRowButton: false, 62 | } 63 | } else if ( 64 | tableDatabase.lastColumnIndex !== columnIndex && 65 | tableDatabase.lastRowIndex !== rowIndex 66 | ) { 67 | return { 68 | ...tableDatabase, 69 | showAddColumnButton: false, 70 | showAddRowButton: false, 71 | } 72 | } else if (tableDatabase.lastColumnIndex === columnIndex) { 73 | return { ...tableDatabase, showAddColumnButton: true } 74 | } else if (tableDatabase.lastColumnIndex !== columnIndex) { 75 | return { ...tableDatabase, showAddColumnButton: false } 76 | } else if (tableDatabase.lastRowIndex === rowIndex) { 77 | return { ...tableDatabase, showAddRowButton: true } 78 | } else if (tableDatabase.lastRowIndex !== rowIndex) { 79 | return { ...tableDatabase, showAddRowButton: false } 80 | } 81 | 82 | return { ...tableDatabase } 83 | }, 84 | 85 | resetTableCellIndex(tableDatabase: TableData) { 86 | return { 87 | ...tableDatabase, 88 | showAddColumnButton: false, 89 | showAddRowButton: false, 90 | } 91 | }, 92 | 93 | addNewColumn(tableDatabase: TableData) { 94 | const { tableData } = tableDatabase 95 | 96 | const currentTableState = cloneDeep(tableData) 97 | currentTableState.map((item) => item.push("")) 98 | 99 | const newLastColumnIndex = Number(currentTableState[0].length - 1) 100 | 101 | const newState = { 102 | ...tableDatabase, 103 | tableData: currentTableState, 104 | lastColumnIndex: newLastColumnIndex, 105 | } 106 | 107 | return newState 108 | }, 109 | 110 | addNewRow(tableDatabase: TableData) { 111 | const { tableData } = tableDatabase 112 | 113 | const currentTableState = cloneDeep(tableData) 114 | const totalColumn = tableDatabase.tableData[0].length 115 | currentTableState.push(Array(totalColumn).fill("")) 116 | 117 | const newLastRowIndex = Number(currentTableState.length - 1) 118 | 119 | return { 120 | ...tableDatabase, 121 | tableData: currentTableState, 122 | lastRowIndex: newLastRowIndex, 123 | } 124 | }, 125 | 126 | addNewRowAndColumn(tableDatabase: TableData) { 127 | const { tableData } = tableDatabase 128 | const currentTableState = cloneDeep(tableData) 129 | 130 | currentTableState.map((item) => item.push("")) 131 | 132 | const totalColumn = currentTableState[0].length 133 | currentTableState.push(Array(totalColumn).fill("")) 134 | 135 | const newLastColumnIndex = Number(currentTableState[0].length - 1) 136 | const newLastRowIndex = Number(currentTableState.length - 1) 137 | 138 | return { 139 | ...tableDatabase, 140 | tableData: currentTableState, 141 | lastRowIndex: newLastRowIndex, 142 | lastColumnIndex: newLastColumnIndex, 143 | } 144 | }, 145 | 146 | updateCell( 147 | tableDatabase: TableData, 148 | text: string | null, 149 | columnIndex: number, 150 | rowIndex: number 151 | ) { 152 | const { tableData } = tableDatabase 153 | 154 | tableData[rowIndex][columnIndex] = text ? text : "" 155 | 156 | return { ...tableDatabase } 157 | }, 158 | } 159 | 160 | export class AppState extends StateMachine { 161 | constructor(initialTable: TableData) { 162 | super(initialTable, reducers) 163 | } 164 | } 165 | 166 | export function useAppState(selector: (state: TableData) => T) { 167 | const { app } = useEnvironment() 168 | const initialState = useMemo(() => { 169 | return selector(app.state) 170 | }, []) 171 | 172 | const [state, setState] = useState(initialState) 173 | const currentStateRef = useRefCurrent(state) 174 | 175 | useEffect(() => { 176 | return app.addListener(() => { 177 | const nextState = selector(app.state) 178 | if (shallowEqual(currentStateRef.current, nextState)) return 179 | setState(nextState) 180 | }) 181 | }, []) 182 | 183 | return state 184 | } 185 | -------------------------------------------------------------------------------- /src/app/Environment.tsx: -------------------------------------------------------------------------------- 1 | import React, { createContext, useContext } from "react" 2 | import { AppState } from "./AppState" 3 | 4 | const services = { app: AppState } 5 | 6 | // ============================================================================ 7 | // Boilerplate 8 | // ============================================================================ 9 | 10 | export type Environment = { 11 | [K in keyof typeof services]: InstanceType 12 | } 13 | 14 | const EnvironmentContext = createContext(undefined) 15 | 16 | export function EnvironmentProvider(props: { 17 | value: Environment 18 | children: React.ReactNode 19 | }) { 20 | return ( 21 | 22 | {props.children} 23 | 24 | ) 25 | } 26 | 27 | export function useEnvironment(): Environment { 28 | const environment = useContext(EnvironmentContext) 29 | if (!environment) throw new Error("Missing Environment") 30 | return environment 31 | } 32 | -------------------------------------------------------------------------------- /src/app/StateMachine.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Removes the first element from a tuple. 3 | * TupleRest<[1,2,3> = [2,3] 4 | */ 5 | export type TupleRest = T extends [any, ...infer U] 6 | ? U 7 | : never 8 | 9 | export type AnyReducers = { [fn: string]: (state: S, ...args: any[]) => S } 10 | 11 | /** 12 | * Defunctionalized action objects {fn: string, args: any[]} 13 | */ 14 | export type Actions> = { 15 | [K in keyof R]: { fn: K; args: TupleRest> } 16 | }[keyof R] 17 | 18 | /** 19 | * The dispatch proxy object so that "Rename Symbol" works: 20 | * https://twitter.com/ccorcos/status/1429545833242894339 21 | */ 22 | export type Dispatcher> = { 23 | [K in keyof R]: (...args: TupleRest>) => void 24 | } 25 | 26 | /** 27 | * An effect plugin is an API for declaratively controlling the outside 28 | * world through controlling state. For example, React is an effect plugin. 29 | * 30 | * function ReactPlugin>( 31 | * node: any, 32 | * render: (state: S) => JSX.Element 33 | * ) { 34 | * return function (app: StateMachine) { 35 | * ReactDOM.render(render(app.state), node) 36 | * return { 37 | * update: () => ReactDOM.render(render(app.state), node), 38 | * destroy: () => ReactDOM.unmountComponentAtNode(node), 39 | * } 40 | * } 41 | * } 42 | * 43 | */ 44 | export type EffectPlugin> = ( 45 | app: StateMachine 46 | ) => Effect 47 | 48 | export type Effect = { 49 | update(prevState: S): void 50 | destroy(): void 51 | } 52 | 53 | /** 54 | * A Redux-like pattern that minimizes boilerplate and maximizes code editor UX. 55 | */ 56 | export class StateMachine> { 57 | private effects: Effect[] 58 | 59 | constructor( 60 | public state: S, 61 | private reducers: R, 62 | plugins: EffectPlugin[] = [] 63 | ) { 64 | // Initialize all effects. 65 | this.effects = plugins.map((plugin) => plugin(this)) 66 | } 67 | 68 | /** 69 | * Effects can dispatch more actions, but we want to make sure that we don't run 70 | * the next action until the previous finishes and updates the state. So we queue 71 | * up actions but everything still runs synchronously. 72 | */ 73 | private actions: Actions[] = [] 74 | private dispatchAction(action: Actions) { 75 | console.info("dispatch:", action) 76 | this.actions.push(action) 77 | if (!this.running) { 78 | this.running = true 79 | this.flush() 80 | this.listeners.forEach((fn) => fn()) 81 | } 82 | } 83 | 84 | public dispatch = (() => { 85 | const self = this 86 | return new Proxy( 87 | {}, 88 | { 89 | get(target, fn: any, receiver) { 90 | return (...args: any[]) => self.dispatchAction({ fn, args } as any) 91 | }, 92 | } 93 | ) 94 | })() as Dispatcher 95 | 96 | private running = false 97 | private flush() { 98 | if (this.actions.length === 0) { 99 | this.running = false 100 | return 101 | } 102 | const action = this.actions.shift()! 103 | const prevState = this.state 104 | this.state = this.reducers[action.fn](prevState, ...action.args) 105 | for (const effect of this.effects) { 106 | effect.update(prevState) 107 | } 108 | this.flush() 109 | } 110 | 111 | public destroy() { 112 | for (const effect of this.effects) { 113 | effect.destroy() 114 | } 115 | } 116 | 117 | private listeners = new Set<() => void>() 118 | 119 | /** 120 | * Listeners are not called on every state/action. They are called after all 121 | * actions that are synchronously dispatched are finished processing. Make sure 122 | * you use the plugin argument if you want to compare with previous state for an effect. 123 | */ 124 | public addListener(listener: () => void) { 125 | this.listeners.add(listener) 126 | return () => { 127 | this.listeners.delete(listener) 128 | } 129 | } 130 | } 131 | -------------------------------------------------------------------------------- /src/app/components/App.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from "react" 2 | import { useAppState } from "../AppState" 3 | import { useEnvironment } from "../Environment" 4 | 5 | export function App() { 6 | const environment = useEnvironment() 7 | const { app } = environment 8 | 9 | const tableDatabase = useAppState((data) => data.tableData) 10 | 11 | const showAddColumnButton = useAppState((data) => data.showAddColumnButton) 12 | const showAddRowButton = useAppState((data) => data.showAddRowButton) 13 | const showAddRowAndColumnButton = showAddColumnButton && showAddRowButton 14 | 15 | const [onAddColumnMouseHover, setOnAddColumnMouseHover] = 16 | useState(false) 17 | 18 | const [onAddRowMouseHover, setOnAddRowMouseHover] = useState(false) 19 | const [onAddColumnAndRowMouseHover, setOnAddColumnAndRowMouseHover] = 20 | useState(false) 21 | 22 | return ( 23 | <> 24 |
29 |
30 |
31 |
32 | app.dispatch.resetTableCellIndex()} 35 | > 36 | {tableDatabase.map((tableData, rowIndex: number) => { 37 | return ( 38 | 39 | {tableData.map((item, columnIndex) => { 40 | return ( 41 | 46 | ) 47 | })} 48 | 49 | ) 50 | })} 51 |
52 | 53 | {/* Add New Column */} 54 |
app.dispatch.addNewColumn()} 56 | style={{ 57 | position: "absolute", 58 | display: "flex", 59 | right: "0px", 60 | top: "8px", 61 | bottom: "18px", 62 | }} 63 | > 64 |
setOnAddColumnMouseHover(true)} 66 | onMouseLeave={() => setOnAddColumnMouseHover(false)} 67 | style={{ 68 | display: "flex", 69 | justifyContent: "center", 70 | alignItems: "center", 71 | opacity: 72 | showAddColumnButton || onAddColumnMouseHover ? 1 : 0, 73 | height: "100%", 74 | width: "100%", 75 | transition: "opacity 150ms ease 50ms", 76 | }} 77 | > 78 |
91 |
101 | + 102 |
103 |
104 |
105 |
106 | 107 | {/* Add New Row */} 108 |
118 |
setOnAddRowMouseHover(true)} 120 | onMouseLeave={() => setOnAddRowMouseHover(false)} 121 | onClick={() => app.dispatch.addNewRow()} 122 | style={{ 123 | display: "flex", 124 | transition: "opacity 150ms ease 50ms", 125 | opacity: showAddRowButton || onAddRowMouseHover ? 1 : 0, 126 | height: "100%", 127 | width: "100%", 128 | }} 129 | > 130 |
144 |
154 | + 155 |
156 |
157 |
158 |
159 | 160 | {/* Add New Row and Coumn */} 161 |
app.dispatch.addNewRowAndColumn()} 163 | style={{ 164 | position: "absolute", 165 | display: "flex", 166 | bottom: "0px", 167 | right: "0px", 168 | }} 169 | > 170 |
setOnAddColumnAndRowMouseHover(true)} 172 | onMouseOut={() => setOnAddColumnAndRowMouseHover(false)} 173 | style={{ 174 | display: "flex", 175 | width: "100%", 176 | height: "100%", 177 | borderRadius: "50%", 178 | opacity: 179 | showAddRowAndColumnButton || onAddColumnAndRowMouseHover 180 | ? 1 181 | : 0, 182 | }} 183 | > 184 |
198 |
209 | + 210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 | 219 | ) 220 | } 221 | 222 | function TableCell({ cellData, rowIndex, columnIndex }) { 223 | const environment = useEnvironment() 224 | const { app } = environment 225 | 226 | return ( 227 | { 229 | app.dispatch.getTableCellIndexOnHover(columnIndex, rowIndex) 230 | }} 231 | style={{ 232 | minHeight: "32px", 233 | minWidth: "120px", 234 | maxWidth: "240px", 235 | padding: "1px 2px", 236 | border: "1px solid rgb(233, 233, 231)", 237 | verticalAlign: "top", 238 | color: "inherit", 239 | fill: "inherit", 240 | }} 241 | contentEditable 242 | onInput={(e) => 243 | app.dispatch.updateCell( 244 | e.currentTarget.textContent, 245 | columnIndex, 246 | rowIndex 247 | ) 248 | } 249 | > 250 |
251 |
265 | {cellData} 266 |
267 |
268 | 269 | ) 270 | } 271 | -------------------------------------------------------------------------------- /src/app/helpers/shallowEqual.ts: -------------------------------------------------------------------------------- 1 | import { intersection, isArray, isPlainObject } from "lodash" 2 | 3 | export function shallowEqual(a: any, b: any) { 4 | if (a == b) return true 5 | if (isArray(a)) { 6 | if (!isArray(b)) return false 7 | if (a.length !== b.length) return false 8 | return a.every((x, i) => b[i] === x) 9 | } 10 | if (isPlainObject(a)) { 11 | if (!isPlainObject(b)) return false 12 | const keys = Object.keys(a) 13 | const sameKeys = intersection(keys, Object.keys(b)) 14 | if (keys.length !== sameKeys.length) return false 15 | return keys.every((key) => a[key] == b[key]) 16 | } 17 | return false 18 | } 19 | -------------------------------------------------------------------------------- /src/app/helpers/uniqueId.ts: -------------------------------------------------------------------------------- 1 | export function uniqueId(): string { 2 | const uint32 = window.crypto.getRandomValues(new Uint32Array(1))[0] 3 | return uint32.toString(16) 4 | } 5 | -------------------------------------------------------------------------------- /src/app/hooks/useRefCurrent.ts: -------------------------------------------------------------------------------- 1 | import { useRef } from "react" 2 | 3 | export function useRefCurrent(value: T) { 4 | const ref = useRef(value) 5 | ref.current = value 6 | return ref 7 | } 8 | -------------------------------------------------------------------------------- /src/app/index.css: -------------------------------------------------------------------------------- 1 | body, 2 | html { 3 | margin: 1em 4px; 4 | padding: 0px; 5 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, 6 | "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; 7 | } 8 | 9 | body, 10 | input, 11 | button { 12 | font-size: 18px; 13 | } 14 | 15 | button { 16 | padding: 6px 16px; 17 | } 18 | 19 | input { 20 | padding: 6px 6px; 21 | } 22 | 23 | table { 24 | border-spacing: 0; 25 | border-collapse: collapse; 26 | } 27 | 28 | [contentEditable="true"]:focus { 29 | outline-color: rgb(46, 170, 220); 30 | } 31 | 32 | /* * { 33 | box-sizing: border-box; 34 | } */ 35 | 36 | /* tr { 37 | display: table-row; 38 | vertical-align: inherit; 39 | border-color: inherit; 40 | } */ 41 | 42 | /* [contenteditable]:empty:after, 43 | .forcePlaceholder:after { 44 | content: attr(placeholder); 45 | } */ 46 | -------------------------------------------------------------------------------- /src/app/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Typescript Boilerplate 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/app/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react" 2 | import ReactDOM from "react-dom" 3 | import { AppState, newTableData } from "./AppState" 4 | import { App } from "./components/App" 5 | import { Environment, EnvironmentProvider } from "./Environment" 6 | 7 | // Build the environment. 8 | let initialTable = newTableData() 9 | 10 | try { 11 | const tableData = JSON.parse(localStorage.getItem("state")!) 12 | if (tableData) initialTable = tableData 13 | } catch (error) {} 14 | 15 | const app = new AppState(initialTable) 16 | 17 | app.addListener(() => { 18 | localStorage.setItem("state", JSON.stringify(app.state)) 19 | }) 20 | 21 | const environment: Environment = { app } 22 | 23 | // Render the app. 24 | const root = document.createElement("div") 25 | document.body.appendChild(root) 26 | 27 | ReactDOM.render( 28 | 29 | 30 | , 31 | root 32 | ) 33 | 34 | // For debugging from the Console. 35 | ;(window as any)["environment"] = environment 36 | Object.assign(window as any, environment) 37 | -------------------------------------------------------------------------------- /src/tools/build.ts: -------------------------------------------------------------------------------- 1 | import cpx from "cpx" 2 | import { build } from "estrella" 3 | import { path } from "./path" 4 | 5 | const watch = process.argv.includes("--watch") 6 | const cmd = watch ? "watch" : "copy" 7 | cpx[cmd](path("src/app/index.html"), path("build/static")) 8 | cpx[cmd](path("src/app/index.css"), path("build/static")) 9 | 10 | build({ 11 | entry: path("src/app/index.tsx"), 12 | outfile: path("build/static/index.js"), 13 | bundle: true, 14 | sourcemap: watch ? "inline" : false, 15 | watch: watch, 16 | clear: false, 17 | // pass any options to esbuild here... 18 | }) 19 | -------------------------------------------------------------------------------- /src/tools/deploy.ts: -------------------------------------------------------------------------------- 1 | // Deploy to Github Pages 2 | // https://guides.github.com/features/pages/ 3 | 4 | import { execSync } from "child_process" 5 | import { path } from "./path" 6 | 7 | const sh = (cmd: string) => execSync(cmd, { cwd: path() }) 8 | 9 | const rm = (p: string) => sh(`rm -rf ${p}`) 10 | const cp = (a: string, b: string) => sh(`cp -r ${a} ${b}`) 11 | 12 | rm("website") 13 | cp("build/static", "website") 14 | sh(`git add .`) 15 | 16 | // This will increment the package.json version and commit it all together. 17 | sh(`npm version patch --force`) 18 | 19 | sh(`git subtree push --prefix website origin gh-pages`) 20 | -------------------------------------------------------------------------------- /src/tools/path.ts: -------------------------------------------------------------------------------- 1 | import * as p from "path" 2 | 3 | // Specify a path based on the root of this repo. 4 | function rootPath(...str: string[]) { 5 | return p.join(__dirname, "../..", ...str) 6 | } 7 | 8 | export const path: typeof rootPath & typeof p = Object.assign(rootPath, p) 9 | -------------------------------------------------------------------------------- /src/tools/server.ts: -------------------------------------------------------------------------------- 1 | import injectLiveReload from "connect-livereload" 2 | import express from "express" 3 | import livereload from "livereload" 4 | import { path } from "./path" 5 | 6 | // Turn on request logging. 7 | // https://expressjs.com/en/guide/debugging.html 8 | process.env.DEBUG = "express:*" 9 | 10 | const app = express() 11 | 12 | // Injects into the html file so the browser reloads when files change. 13 | app.use(injectLiveReload()) 14 | // Watch for changed to send a message over websocket. 15 | livereload.createServer().watch(path("build/static")) 16 | 17 | // Fallback to HTML for client-side routing to work. 18 | app.use(express.static(path("build/static"))) 19 | app.use("*", express.static(path("build/static/index.html"))) 20 | 21 | app.listen(8080, () => console.log("Listening: http://localhost:8080")) 22 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2018", 4 | "module": "commonjs", 5 | "jsx": "react", 6 | "moduleResolution": "node", 7 | "esModuleInterop": true, 8 | "allowSyntheticDefaultImports": true, 9 | "strictNullChecks": true, 10 | "strictFunctionTypes": true, 11 | "noImplicitThis": true, 12 | "noImplicitAny": false, 13 | "noUnusedLocals": false, 14 | "noUnusedParameters": false, 15 | "removeComments": true, 16 | "sourceMap": true, 17 | "allowJs": true, 18 | "skipLibCheck": true, 19 | "lib": ["DOM", "ES2018"] 20 | }, 21 | "include": ["src/**/*"], 22 | "exclude": ["node_modules"] 23 | } 24 | -------------------------------------------------------------------------------- /website/index.css: -------------------------------------------------------------------------------- 1 | body, 2 | html { 3 | margin: 1em 4px; 4 | padding: 0px; 5 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, 6 | "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; 7 | } 8 | 9 | body, 10 | input, 11 | button { 12 | font-size: 18px; 13 | } 14 | 15 | button { 16 | padding: 6px 16px; 17 | } 18 | 19 | input { 20 | padding: 6px 6px; 21 | } 22 | 23 | table { 24 | border-spacing: 0; 25 | border-collapse: collapse; 26 | } 27 | 28 | [contentEditable="true"]:focus { 29 | outline-color: rgb(46, 170, 220); 30 | } 31 | 32 | /* * { 33 | box-sizing: border-box; 34 | } */ 35 | 36 | /* tr { 37 | display: table-row; 38 | vertical-align: inherit; 39 | border-color: inherit; 40 | } */ 41 | 42 | /* [contenteditable]:empty:after, 43 | .forcePlaceholder:after { 44 | content: attr(placeholder); 45 | } */ 46 | -------------------------------------------------------------------------------- /website/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Typescript Boilerplate 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /website/index.js: -------------------------------------------------------------------------------- 1 | (()=>{var zE=Object.create,yf=Object.defineProperty;var BE=Object.getOwnPropertyDescriptor;var WE=Object.getOwnPropertyNames;var HE=Object.getPrototypeOf,$E=Object.prototype.hasOwnProperty;var VE=e=>yf(e,"__esModule",{value:!0});var Et=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var KE=(e,n,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let l of WE(n))!$E.call(e,l)&&l!=="default"&&yf(e,l,{get:()=>n[l],enumerable:!(r=BE(n,l))||r.enumerable});return e},Ct=e=>KE(VE(yf(e!=null?zE(HE(e)):{},"default",e&&e.__esModule&&"default"in e?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e);var _f=Et((e3,xh)=>{"use strict";var wh=Object.getOwnPropertySymbols,GE=Object.prototype.hasOwnProperty,jE=Object.prototype.propertyIsEnumerable;function QE(e){if(e==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function YE(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de",Object.getOwnPropertyNames(e)[0]==="5")return!1;for(var n={},r=0;r<10;r++)n["_"+String.fromCharCode(r)]=r;var l=Object.getOwnPropertyNames(n).map(function(f){return n[f]});if(l.join("")!=="0123456789")return!1;var o={};return"abcdefghijklmnopqrst".split("").forEach(function(f){o[f]=f}),Object.keys(Object.assign({},o)).join("")==="abcdefghijklmnopqrst"}catch(f){return!1}}xh.exports=YE()?Object.assign:function(e,n){for(var r,l=QE(e),o,f=1;f{"use strict";var wf=_f(),Mr=60103,Sh=60106;ue.Fragment=60107;ue.StrictMode=60108;ue.Profiler=60114;var Eh=60109,Ch=60110,kh=60112;ue.Suspense=60113;var Th=60115,Rh=60116;typeof Symbol=="function"&&Symbol.for&&(wn=Symbol.for,Mr=wn("react.element"),Sh=wn("react.portal"),ue.Fragment=wn("react.fragment"),ue.StrictMode=wn("react.strict_mode"),ue.Profiler=wn("react.profiler"),Eh=wn("react.provider"),Ch=wn("react.context"),kh=wn("react.forward_ref"),ue.Suspense=wn("react.suspense"),Th=wn("react.memo"),Rh=wn("react.lazy"));var wn,Lh=typeof Symbol=="function"&&Symbol.iterator;function XE(e){return e===null||typeof e!="object"?null:(e=Lh&&e[Lh]||e["@@iterator"],typeof e=="function"?e:null)}function zi(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r{"use strict";zh.exports=Uh()});var Kh=Et(fe=>{"use strict";var Fr,Bi,Ml,Tf;typeof performance=="object"&&typeof performance.now=="function"?(Bh=performance,fe.unstable_now=function(){return Bh.now()}):(Rf=Date,Wh=Rf.now(),fe.unstable_now=function(){return Rf.now()-Wh});var Bh,Rf,Wh;typeof window=="undefined"||typeof MessageChannel!="function"?(Ur=null,Lf=null,Pf=function(){if(Ur!==null)try{var e=fe.unstable_now();Ur(!0,e),Ur=null}catch(n){throw setTimeout(Pf,0),n}},Fr=function(e){Ur!==null?setTimeout(Fr,0,e):(Ur=e,setTimeout(Pf,0))},Bi=function(e,n){Lf=setTimeout(e,n)},Ml=function(){clearTimeout(Lf)},fe.unstable_shouldYield=function(){return!1},Tf=fe.unstable_forceFrameRate=function(){}):(Hh=window.setTimeout,$h=window.clearTimeout,typeof console!="undefined"&&(Vh=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),typeof Vh!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")),Wi=!1,Hi=null,Dl=-1,Af=5,Of=0,fe.unstable_shouldYield=function(){return fe.unstable_now()>=Of},Tf=function(){},fe.unstable_forceFrameRate=function(e){0>e||125>>1,o=e[l];if(o!==void 0&&0zl(c,r))g!==void 0&&0>zl(g,c)?(e[l]=g,e[p]=r,l=p):(e[l]=c,e[f]=r,l=f);else if(g!==void 0&&0>zl(g,r))e[l]=g,e[p]=r,l=p;else break e}}return n}return null}function zl(e,n){var r=e.sortIndex-n.sortIndex;return r!==0?r:e.id-n.id}var $n=[],kt=[],eC=1,xn=null,Be=3,Bl=!1,ir=!1,$i=!1;function Mf(e){for(var n=Mn(kt);n!==null;){if(n.callback===null)Ul(kt);else if(n.startTime<=e)Ul(kt),n.sortIndex=n.expirationTime,Nf($n,n);else break;n=Mn(kt)}}function Df(e){if($i=!1,Mf(e),!ir)if(Mn($n)!==null)ir=!0,Fr(Ff);else{var n=Mn(kt);n!==null&&Bi(Df,n.startTime-e)}}function Ff(e,n){ir=!1,$i&&($i=!1,Ml()),Bl=!0;var r=Be;try{for(Mf(n),xn=Mn($n);xn!==null&&(!(xn.expirationTime>n)||e&&!fe.unstable_shouldYield());){var l=xn.callback;if(typeof l=="function"){xn.callback=null,Be=xn.priorityLevel;var o=l(xn.expirationTime<=n);n=fe.unstable_now(),typeof o=="function"?xn.callback=o:xn===Mn($n)&&Ul($n),Mf(n)}else Ul($n);xn=Mn($n)}if(xn!==null)var f=!0;else{var c=Mn(kt);c!==null&&Bi(Df,c.startTime-n),f=!1}return f}finally{xn=null,Be=r,Bl=!1}}var nC=Tf;fe.unstable_IdlePriority=5;fe.unstable_ImmediatePriority=1;fe.unstable_LowPriority=4;fe.unstable_NormalPriority=3;fe.unstable_Profiling=null;fe.unstable_UserBlockingPriority=2;fe.unstable_cancelCallback=function(e){e.callback=null};fe.unstable_continueExecution=function(){ir||Bl||(ir=!0,Fr(Ff))};fe.unstable_getCurrentPriorityLevel=function(){return Be};fe.unstable_getFirstCallbackNode=function(){return Mn($n)};fe.unstable_next=function(e){switch(Be){case 1:case 2:case 3:var n=3;break;default:n=Be}var r=Be;Be=n;try{return e()}finally{Be=r}};fe.unstable_pauseExecution=function(){};fe.unstable_requestPaint=nC;fe.unstable_runWithPriority=function(e,n){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var r=Be;Be=e;try{return n()}finally{Be=r}};fe.unstable_scheduleCallback=function(e,n,r){var l=fe.unstable_now();switch(typeof r=="object"&&r!==null?(r=r.delay,r=typeof r=="number"&&0l?(e.sortIndex=r,Nf(kt,e),Mn($n)===null&&e===Mn(kt)&&($i?Ml():$i=!0,Bi(Df,r-l))):(e.sortIndex=o,Nf($n,e),ir||Bl||(ir=!0,Fr(Ff))),e};fe.unstable_wrapCallback=function(e){var n=Be;return function(){var r=Be;Be=n;try{return e.apply(this,arguments)}finally{Be=r}}}});var jh=Et((i3,Gh)=>{"use strict";Gh.exports=Kh()});var Nv=Et(Rn=>{"use strict";var Wl=rr(),_e=_f(),Ie=jh();function I(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;rn}return!1}function Qe(e,n,r,l,o,f,c){this.acceptsBooleans=n===2||n===3||n===4,this.attributeName=l,this.attributeNamespace=o,this.mustUseProperty=r,this.propertyName=e,this.type=n,this.sanitizeURL=f,this.removeEmptyString=c}var Me={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Me[e]=new Qe(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var n=e[0];Me[n]=new Qe(n,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Me[e]=new Qe(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Me[e]=new Qe(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Me[e]=new Qe(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Me[e]=new Qe(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Me[e]=new Qe(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Me[e]=new Qe(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Me[e]=new Qe(e,5,!1,e.toLowerCase(),null,!1,!1)});var Uf=/[\-:]([a-z])/g;function zf(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var n=e.replace(Uf,zf);Me[n]=new Qe(n,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var n=e.replace(Uf,zf);Me[n]=new Qe(n,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var n=e.replace(Uf,zf);Me[n]=new Qe(n,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Me[e]=new Qe(e,1,!1,e.toLowerCase(),null,!1,!1)});Me.xlinkHref=new Qe("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Me[e]=new Qe(e,1,!1,e.toLowerCase(),null,!0,!0)});function Bf(e,n,r,l){var o=Me.hasOwnProperty(n)?Me[n]:null,f=o!==null?o.type===0:l?!1:!(!(2p||o[c]!==f[p])return` 5 | `+o[c].replace(" at new "," at ");while(1<=c&&0<=p);break}}}finally{Xf=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:"")?Yi(e):""}function lC(e){switch(e.tag){case 5:return Yi(e.type);case 16:return Yi("Lazy");case 13:return Yi("Suspense");case 19:return Yi("SuspenseList");case 0:case 2:case 15:return e=Kl(e.type,!1),e;case 11:return e=Kl(e.type.render,!1),e;case 22:return e=Kl(e.type._render,!1),e;case 1:return e=Kl(e.type,!0),e;default:return""}}function Br(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Tt:return"Fragment";case or:return"Portal";case Gi:return"Profiler";case Wf:return"StrictMode";case ji:return"Suspense";case $l:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case $f:return(e.displayName||"Context")+".Consumer";case Hf:return(e._context.displayName||"Context")+".Provider";case Hl:var n=e.render;return n=n.displayName||n.name||"",e.displayName||(n!==""?"ForwardRef("+n+")":"ForwardRef");case Vl:return Br(e.type);case Kf:return Br(e._render);case Vf:n=e._payload,e=e._init;try{return Br(e(n))}catch(r){}}return null}function Rt(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function bh(e){var n=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(n==="checkbox"||n==="radio")}function oC(e){var n=bh(e)?"checked":"value",r=Object.getOwnPropertyDescriptor(e.constructor.prototype,n),l=""+e[n];if(!e.hasOwnProperty(n)&&typeof r!="undefined"&&typeof r.get=="function"&&typeof r.set=="function"){var o=r.get,f=r.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return o.call(this)},set:function(c){l=""+c,f.call(this,c)}}),Object.defineProperty(e,n,{enumerable:r.enumerable}),{getValue:function(){return l},setValue:function(c){l=""+c},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}function Gl(e){e._valueTracker||(e._valueTracker=oC(e))}function e0(e){if(!e)return!1;var n=e._valueTracker;if(!n)return!0;var r=n.getValue(),l="";return e&&(l=bh(e)?e.checked?"true":"false":e.value),e=l,e!==r?(n.setValue(e),!0):!1}function jl(e){if(e=e||(typeof document!="undefined"?document:void 0),typeof e=="undefined")return null;try{return e.activeElement||e.body}catch(n){return e.body}}function Zf(e,n){var r=n.checked;return _e({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:r??e._wrapperState.initialChecked})}function n0(e,n){var r=n.defaultValue==null?"":n.defaultValue,l=n.checked!=null?n.checked:n.defaultChecked;r=Rt(n.value!=null?n.value:r),e._wrapperState={initialChecked:l,initialValue:r,controlled:n.type==="checkbox"||n.type==="radio"?n.checked!=null:n.value!=null}}function t0(e,n){n=n.checked,n!=null&&Bf(e,"checked",n,!1)}function qf(e,n){t0(e,n);var r=Rt(n.value),l=n.type;if(r!=null)l==="number"?(r===0&&e.value===""||e.value!=r)&&(e.value=""+r):e.value!==""+r&&(e.value=""+r);else if(l==="submit"||l==="reset"){e.removeAttribute("value");return}n.hasOwnProperty("value")?Jf(e,n.type,r):n.hasOwnProperty("defaultValue")&&Jf(e,n.type,Rt(n.defaultValue)),n.checked==null&&n.defaultChecked!=null&&(e.defaultChecked=!!n.defaultChecked)}function r0(e,n,r){if(n.hasOwnProperty("value")||n.hasOwnProperty("defaultValue")){var l=n.type;if(!(l!=="submit"&&l!=="reset"||n.value!==void 0&&n.value!==null))return;n=""+e._wrapperState.initialValue,r||n===e.value||(e.value=n),e.defaultValue=n}r=e.name,r!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,r!==""&&(e.name=r)}function Jf(e,n,r){(n!=="number"||jl(e.ownerDocument)!==e)&&(r==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+r&&(e.defaultValue=""+r))}function sC(e){var n="";return Wl.Children.forEach(e,function(r){r!=null&&(n+=r)}),n}function bf(e,n){return e=_e({children:void 0},n),(n=sC(n.children))&&(e.children=n),e}function Wr(e,n,r,l){if(e=e.options,n){n={};for(var o=0;o=r.length))throw Error(I(93));r=r[0]}n=r}n==null&&(n=""),r=n}e._wrapperState={initialValue:Rt(r)}}function u0(e,n){var r=Rt(n.value),l=Rt(n.defaultValue);r!=null&&(r=""+r,r!==e.value&&(e.value=r),n.defaultValue==null&&e.defaultValue!==r&&(e.defaultValue=r)),l!=null&&(e.defaultValue=""+l)}function l0(e){var n=e.textContent;n===e._wrapperState.initialValue&&n!==""&&n!==null&&(e.value=n)}var na={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function o0(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function ta(e,n){return e==null||e==="http://www.w3.org/1999/xhtml"?o0(n):e==="http://www.w3.org/2000/svg"&&n==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var Ql,s0=function(e){return typeof MSApp!="undefined"&&MSApp.execUnsafeLocalFunction?function(n,r,l,o){MSApp.execUnsafeLocalFunction(function(){return e(n,r,l,o)})}:e}(function(e,n){if(e.namespaceURI!==na.svg||"innerHTML"in e)e.innerHTML=n;else{for(Ql=Ql||document.createElement("div"),Ql.innerHTML=""+n.valueOf().toString()+"",n=Ql.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;n.firstChild;)e.appendChild(n.firstChild)}});function Xi(e,n){if(n){var r=e.firstChild;if(r&&r===e.lastChild&&r.nodeType===3){r.nodeValue=n;return}}e.textContent=n}var Zi={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},fC=["Webkit","ms","Moz","O"];Object.keys(Zi).forEach(function(e){fC.forEach(function(n){n=n+e.charAt(0).toUpperCase()+e.substring(1),Zi[n]=Zi[e]})});function f0(e,n,r){return n==null||typeof n=="boolean"||n===""?"":r||typeof n!="number"||n===0||Zi.hasOwnProperty(e)&&Zi[e]?(""+n).trim():n+"px"}function a0(e,n){e=e.style;for(var r in n)if(n.hasOwnProperty(r)){var l=r.indexOf("--")===0,o=f0(r,n[r],l);r==="float"&&(r="cssFloat"),l?e.setProperty(r,o):e[r]=o}}var aC=_e({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ra(e,n){if(n){if(aC[e]&&(n.children!=null||n.dangerouslySetInnerHTML!=null))throw Error(I(137,e));if(n.dangerouslySetInnerHTML!=null){if(n.children!=null)throw Error(I(60));if(!(typeof n.dangerouslySetInnerHTML=="object"&&"__html"in n.dangerouslySetInnerHTML))throw Error(I(61))}if(n.style!=null&&typeof n.style!="object")throw Error(I(62))}}function ia(e,n){if(e.indexOf("-")===-1)return typeof n.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function ua(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var la=null,Hr=null,$r=null;function c0(e){if(e=hu(e)){if(typeof la!="function")throw Error(I(280));var n=e.stateNode;n&&(n=ho(n),la(e.stateNode,e.type,n))}}function d0(e){Hr?$r?$r.push(e):$r=[e]:Hr=e}function p0(){if(Hr){var e=Hr,n=$r;if($r=Hr=null,c0(e),n)for(e=0;el?0:1<r;r++)n.push(e);return n}function eo(e,n,r){e.pendingLanes|=n;var l=n-1;e.suspendedLanes&=l,e.pingedLanes&=l,e=e.eventTimes,n=31-Ot(n),e[n]=r}var Ot=Math.clz32?Math.clz32:TC,CC=Math.log,kC=Math.LN2;function TC(e){return e===0?32:31-(CC(e)/kC|0)|0}var RC=Ie.unstable_UserBlockingPriority,LC=Ie.unstable_runWithPriority,no=!0;function PC(e,n,r,l){sr||sa();var o=wa,f=sr;sr=!0;try{h0(o,e,n,r,l)}finally{(sr=f)||aa()}}function AC(e,n,r,l){LC(RC,wa.bind(null,e,n,r,l))}function wa(e,n,r,l){if(no){var o;if((o=(n&4)==0)&&0=ou),W0=String.fromCharCode(32),H0=!1;function $0(e,n){switch(e){case"keyup":return bC.indexOf(n.keyCode)!==-1;case"keydown":return n.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function V0(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Yr=!1;function n2(e,n){switch(e){case"compositionend":return V0(n);case"keypress":return n.which!==32?null:(H0=!0,W0);case"textInput":return e=n.data,e===W0&&H0?null:e;default:return null}}function t2(e,n){if(Yr)return e==="compositionend"||!La&&$0(e,n)?(e=M0(),to=Sa=It=null,Yr=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(n.ctrlKey||n.altKey||n.metaKey)||n.ctrlKey&&n.altKey){if(n.char&&1=n)return{node:r,offset:n-e};e=l}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=X0(r)}}function q0(e,n){return e&&n?e===n?!0:e&&e.nodeType===3?!1:n&&n.nodeType===3?q0(e,n.parentNode):"contains"in e?e.contains(n):e.compareDocumentPosition?!!(e.compareDocumentPosition(n)&16):!1:!1}function J0(){for(var e=window,n=jl();n instanceof e.HTMLIFrameElement;){try{var r=typeof n.contentWindow.location.href=="string"}catch(l){r=!1}if(r)e=n.contentWindow;else break;n=jl(e.document)}return n}function Aa(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n&&(n==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||n==="textarea"||e.contentEditable==="true")}var d2=lt&&"documentMode"in document&&11>=document.documentMode,Xr=null,Oa=null,cu=null,Ia=!1;function b0(e,n,r){var l=r.window===r?r.document:r.nodeType===9?r:r.ownerDocument;Ia||Xr==null||Xr!==jl(l)||(l=Xr,"selectionStart"in l&&Aa(l)?l={start:l.selectionStart,end:l.selectionEnd}:(l=(l.ownerDocument&&l.ownerDocument.defaultView||window).getSelection(),l={anchorNode:l.anchorNode,anchorOffset:l.anchorOffset,focusNode:l.focusNode,focusOffset:l.focusOffset}),cu&&au(cu,l)||(cu=l,l=fo(Oa,"onSelect"),0ei||(e.current=Ba[ei],Ba[ei]=null,ei--)}function Se(e,n){ei++,Ba[ei]=e.current,e.current=n}var Dt={},We=Mt(Dt),be=Mt(!1),cr=Dt;function ni(e,n){var r=e.type.contextTypes;if(!r)return Dt;var l=e.stateNode;if(l&&l.__reactInternalMemoizedUnmaskedChildContext===n)return l.__reactInternalMemoizedMaskedChildContext;var o={},f;for(f in r)o[f]=n[f];return l&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=o),o}function en(e){return e=e.childContextTypes,e!=null}function go(){ve(be),ve(We)}function gg(e,n,r){if(We.current!==Dt)throw Error(I(168));Se(We,n),Se(be,r)}function vg(e,n,r){var l=e.stateNode;if(e=n.childContextTypes,typeof l.getChildContext!="function")return r;l=l.getChildContext();for(var o in l)if(!(o in e))throw Error(I(108,Br(n)||"Unknown",o));return _e({},r,l)}function vo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Dt,cr=We.current,Se(We,e),Se(be,be.current),!0}function mg(e,n,r){var l=e.stateNode;if(!l)throw Error(I(169));r?(e=vg(e,n,cr),l.__reactInternalMemoizedMergedChildContext=e,ve(be),ve(We),Se(We,e)):ve(be),Se(be,r)}var Wa=null,dr=null,g2=Ie.unstable_runWithPriority,Ha=Ie.unstable_scheduleCallback,$a=Ie.unstable_cancelCallback,v2=Ie.unstable_shouldYield,yg=Ie.unstable_requestPaint,Va=Ie.unstable_now,m2=Ie.unstable_getCurrentPriorityLevel,mo=Ie.unstable_ImmediatePriority,_g=Ie.unstable_UserBlockingPriority,wg=Ie.unstable_NormalPriority,xg=Ie.unstable_LowPriority,Sg=Ie.unstable_IdlePriority,Ka={},y2=yg!==void 0?yg:function(){},ot=null,yo=null,Ga=!1,Eg=Va(),He=1e4>Eg?Va:function(){return Va()-Eg};function ti(){switch(m2()){case mo:return 99;case _g:return 98;case wg:return 97;case xg:return 96;case Sg:return 95;default:throw Error(I(332))}}function Cg(e){switch(e){case 99:return mo;case 98:return _g;case 97:return wg;case 96:return xg;case 95:return Sg;default:throw Error(I(332))}}function pr(e,n){return e=Cg(e),g2(e,n)}function gu(e,n,r){return e=Cg(e),Ha(e,n,r)}function Kn(){if(yo!==null){var e=yo;yo=null,$a(e)}kg()}function kg(){if(!Ga&&ot!==null){Ga=!0;var e=0;try{var n=ot;pr(99,function(){for(;eQ?(b=D,D=null):b=D.sibling;var X=R(S,D,w[Q],k);if(X===null){D===null&&(D=b);break}e&&D&&X.alternate===null&&n(S,D),y=f(X,y,Q),V===null?L=X:V.sibling=X,V=X,D=b}if(Q===w.length)return r(S,D),L;if(D===null){for(;QQ?(b=D,D=null):b=D.sibling;var Un=R(S,D,X.value,k);if(Un===null){D===null&&(D=b);break}e&&D&&Un.alternate===null&&n(S,D),y=f(Un,y,Q),V===null?L=Un:V.sibling=Un,V=Un,D=b}if(X.done)return r(S,D),L;if(D===null){for(;!X.done;Q++,X=w.next())X=$(S,X.value,k),X!==null&&(y=f(X,y,Q),V===null?L=X:V.sibling=X,V=X);return L}for(D=l(S,D);!X.done;Q++,X=w.next())X=F(D,S,Q,X.value,k),X!==null&&(e&&X.alternate!==null&&D.delete(X.key===null?Q:X.key),y=f(X,y,Q),V===null?L=X:V.sibling=X,V=X);return e&&D.forEach(function(Xo){return n(S,Xo)}),L}return function(S,y,w,k){var L=typeof w=="object"&&w!==null&&w.type===Tt&&w.key===null;L&&(w=w.props.children);var V=typeof w=="object"&&w!==null;if(V)switch(w.$$typeof){case Ki:e:{for(V=w.key,L=y;L!==null;){if(L.key===V){switch(L.tag){case 7:if(w.type===Tt){r(S,L.sibling),y=o(L,w.props.children),y.return=S,S=y;break e}break;default:if(L.elementType===w.type){r(S,L.sibling),y=o(L,w.props),y.ref=mu(S,L,w),y.return=S,S=y;break e}}r(S,L);break}else n(S,L);L=L.sibling}w.type===Tt?(y=di(w.props.children,S.mode,k,w.key),y.return=S,S=y):(k=Vo(w.type,w.key,w.props,null,S.mode,k),k.ref=mu(S,y,w),k.return=S,S=k)}return c(S);case or:e:{for(L=w.key;y!==null;){if(y.key===L)if(y.tag===4&&y.stateNode.containerInfo===w.containerInfo&&y.stateNode.implementation===w.implementation){r(S,y.sibling),y=o(y,w.children||[]),y.return=S,S=y;break e}else{r(S,y);break}else n(S,y);y=y.sibling}y=Ic(w,S.mode,k),y.return=S,S=y}return c(S)}if(typeof w=="string"||typeof w=="number")return w=""+w,y!==null&&y.tag===6?(r(S,y.sibling),y=o(y,w),y.return=S,S=y):(r(S,y),y=Oc(w,S.mode,k),y.return=S,S=y),c(S);if(Co(w))return B(S,y,w,k);if(Qi(w))return H(S,y,w,k);if(V&&ko(S,w),typeof w=="undefined"&&!L)switch(S.tag){case 1:case 22:case 0:case 11:case 15:throw Error(I(152,Br(S.type)||"Component"))}return r(S,y)}}var To=Mg(!0),Dg=Mg(!1),yu={},Gn=Mt(yu),_u=Mt(yu),wu=Mt(yu);function hr(e){if(e===yu)throw Error(I(174));return e}function Za(e,n){switch(Se(wu,n),Se(_u,e),Se(Gn,yu),e=n.nodeType,e){case 9:case 11:n=(n=n.documentElement)?n.namespaceURI:ta(null,"");break;default:e=e===8?n.parentNode:n,n=e.namespaceURI||null,e=e.tagName,n=ta(n,e)}ve(Gn),Se(Gn,n)}function ui(){ve(Gn),ve(_u),ve(wu)}function Fg(e){hr(wu.current);var n=hr(Gn.current),r=ta(n,e.type);n!==r&&(Se(_u,e),Se(Gn,r))}function qa(e){_u.current===e&&(ve(Gn),ve(_u))}var Ee=Mt(0);function Ro(e){for(var n=e;n!==null;){if(n.tag===13){var r=n.memoizedState;if(r!==null&&(r=r.dehydrated,r===null||r.data==="$?"||r.data==="$!"))return n}else if(n.tag===19&&n.memoizedProps.revealOrder!==void 0){if((n.flags&64)!=0)return n}else if(n.child!==null){n.child.return=n,n=n.child;continue}if(n===e)break;for(;n.sibling===null;){if(n.return===null||n.return===e)return null;n=n.return}n.sibling.return=n.return,n=n.sibling}return null}var st=null,Bt=null,jn=!1;function Ug(e,n){var r=Tn(5,null,null,0);r.elementType="DELETED",r.type="DELETED",r.stateNode=n,r.return=e,r.flags=8,e.lastEffect!==null?(e.lastEffect.nextEffect=r,e.lastEffect=r):e.firstEffect=e.lastEffect=r}function zg(e,n){switch(e.tag){case 5:var r=e.type;return n=n.nodeType!==1||r.toLowerCase()!==n.nodeName.toLowerCase()?null:n,n!==null?(e.stateNode=n,!0):!1;case 6:return n=e.pendingProps===""||n.nodeType!==3?null:n,n!==null?(e.stateNode=n,!0):!1;case 13:return!1;default:return!1}}function Ja(e){if(jn){var n=Bt;if(n){var r=n;if(!zg(e,n)){if(n=qr(r.nextSibling),!n||!zg(e,n)){e.flags=e.flags&-1025|2,jn=!1,st=e;return}Ug(st,r)}st=e,Bt=qr(n.firstChild)}else e.flags=e.flags&-1025|2,jn=!1,st=e}}function Bg(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;st=e}function Lo(e){if(e!==st)return!1;if(!jn)return Bg(e),jn=!0,!1;var n=e.type;if(e.tag!==5||n!=="head"&&n!=="body"&&!Fa(n,e.memoizedProps))for(n=Bt;n;)Ug(e,n),n=qr(n.nextSibling);if(Bg(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(I(317));e:{for(e=e.nextSibling,n=0;e;){if(e.nodeType===8){var r=e.data;if(r==="/$"){if(n===0){Bt=qr(e.nextSibling);break e}n--}else r!=="$"&&r!=="$!"&&r!=="$?"||n++}e=e.nextSibling}Bt=null}}else Bt=st?qr(e.stateNode.nextSibling):null;return!0}function ba(){Bt=st=null,jn=!1}var li=[];function ec(){for(var e=0;ef))throw Error(I(301));f+=1,De=$e=null,n.updateQueue=null,xu.current=E2,e=r(l,o)}while(Eu)}if(xu.current=No,n=$e!==null&&$e.next!==null,Su=0,De=$e=Te=null,Po=!1,n)throw Error(I(300));return e}function gr(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return De===null?Te.memoizedState=De=e:De=De.next=e,De}function vr(){if($e===null){var e=Te.alternate;e=e!==null?e.memoizedState:null}else e=$e.next;var n=De===null?Te.memoizedState:De.next;if(n!==null)De=n,$e=e;else{if(e===null)throw Error(I(310));$e=e,e={memoizedState:$e.memoizedState,baseState:$e.baseState,baseQueue:$e.baseQueue,queue:$e.queue,next:null},De===null?Te.memoizedState=De=e:De=De.next=e}return De}function Qn(e,n){return typeof n=="function"?n(e):n}function Cu(e){var n=vr(),r=n.queue;if(r===null)throw Error(I(311));r.lastRenderedReducer=e;var l=$e,o=l.baseQueue,f=r.pending;if(f!==null){if(o!==null){var c=o.next;o.next=f.next,f.next=c}l.baseQueue=o=f,r.pending=null}if(o!==null){o=o.next,l=l.baseState;var p=c=f=null,g=o;do{var E=g.lane;if((Su&E)===E)p!==null&&(p=p.next={lane:0,action:g.action,eagerReducer:g.eagerReducer,eagerState:g.eagerState,next:null}),l=g.eagerReducer===e?g.eagerState:e(l,g.action);else{var N={lane:E,action:g.action,eagerReducer:g.eagerReducer,eagerState:g.eagerState,next:null};p===null?(c=p=N,f=l):p=p.next=N,Te.lanes|=E,Lu|=E}g=g.next}while(g!==null&&g!==o);p===null?f=l:p.next=c,Sn(l,n.memoizedState)||(Fn=!0),n.memoizedState=l,n.baseState=f,n.baseQueue=p,r.lastRenderedState=l}return[n.memoizedState,r.dispatch]}function ku(e){var n=vr(),r=n.queue;if(r===null)throw Error(I(311));r.lastRenderedReducer=e;var l=r.dispatch,o=r.pending,f=n.memoizedState;if(o!==null){r.pending=null;var c=o=o.next;do f=e(f,c.action),c=c.next;while(c!==o);Sn(f,n.memoizedState)||(Fn=!0),n.memoizedState=f,n.baseQueue===null&&(n.baseState=f),r.lastRenderedState=f}return[f,l]}function Wg(e,n,r){var l=n._getVersion;l=l(n._source);var o=n._workInProgressVersionPrimary;if(o!==null?e=o===l:(e=e.mutableReadLanes,(e=(Su&e)===e)&&(n._workInProgressVersionPrimary=l,li.push(n))),e)return r(n._source);throw li.push(n),Error(I(350))}function Hg(e,n,r,l){var o=Ye;if(o===null)throw Error(I(349));var f=n._getVersion,c=f(n._source),p=xu.current,g=p.useState(function(){return Wg(o,n,r)}),E=g[1],N=g[0];g=De;var $=e.memoizedState,R=$.refs,F=R.getSnapshot,B=$.source;$=$.subscribe;var H=Te;return e.memoizedState={refs:R,source:n,subscribe:l},p.useEffect(function(){R.getSnapshot=r,R.setSnapshot=E;var S=f(n._source);if(!Sn(c,S)){S=r(n._source),Sn(N,S)||(E(S),S=Ht(H),o.mutableReadLanes|=S&o.pendingLanes),S=o.mutableReadLanes,o.entangledLanes|=S;for(var y=o.entanglements,w=S;0r?98:r,function(){e(!0)}),pr(97",e=e.removeChild(e.firstChild)):typeof l.is=="string"?e=c.createElement(r,{is:l.is}):(e=c.createElement(r),r==="select"&&(c=e,l.multiple?c.multiple=!0:l.size&&(c.size=l.size))):e=c.createElementNS(e,r),e[Nt]=n,e[po]=l,sv(e,n,!1,!1),n.stateNode=e,c=ia(r,l),r){case"dialog":ge("cancel",e),ge("close",e),o=l;break;case"iframe":case"object":case"embed":ge("load",e),o=l;break;case"video":case"audio":for(o=0;oSc&&(n.flags|=64,f=!0,Ru(l,!1),n.lanes=33554432)}else{if(!f)if(e=Ro(c),e!==null){if(n.flags|=64,f=!0,r=e.updateQueue,r!==null&&(n.updateQueue=r,n.flags|=4),Ru(l,!0),l.tail===null&&l.tailMode==="hidden"&&!c.alternate&&!jn)return n=n.lastEffect=l.lastEffect,n!==null&&(n.nextEffect=null),null}else 2*He()-l.renderingStartTime>Sc&&r!==1073741824&&(n.flags|=64,f=!0,Ru(l,!1),n.lanes=33554432);l.isBackwards?(c.sibling=n.child,n.child=c):(r=l.last,r!==null?r.sibling=c:n.child=c,l.last=c)}return l.tail!==null?(r=l.tail,l.rendering=r,l.tail=r.sibling,l.lastEffect=n.lastEffect,l.renderingStartTime=He(),r.sibling=null,n=Ee.current,Se(Ee,f?n&1|2:n&1),r):null;case 23:case 24:return Lc(),e!==null&&e.memoizedState!==null!=(n.memoizedState!==null)&&l.mode!=="unstable-defer-without-hiding"&&(n.flags|=4),null}throw Error(I(156,n.tag))}function T2(e){switch(e.tag){case 1:en(e.type)&&go();var n=e.flags;return n&4096?(e.flags=n&-4097|64,e):null;case 3:if(ui(),ve(be),ve(We),ec(),n=e.flags,(n&64)!=0)throw Error(I(285));return e.flags=n&-4097|64,e;case 5:return qa(e),null;case 13:return ve(Ee),n=e.flags,n&4096?(e.flags=n&-4097|64,e):null;case 19:return ve(Ee),null;case 4:return ui(),null;case 10:return Qa(e),null;case 23:case 24:return Lc(),null;default:return null}}function dc(e,n){try{var r="",l=n;do r+=lC(l),l=l.return;while(l);var o=r}catch(f){o=` 6 | Error generating stack: `+f.message+` 7 | `+f.stack}return{value:e,source:n,stack:o}}function pc(e,n){try{console.error(n.value)}catch(r){setTimeout(function(){throw r})}}var R2=typeof WeakMap=="function"?WeakMap:Map;function cv(e,n,r){r=Ut(-1,r),r.tag=3,r.payload={element:null};var l=n.value;return r.callback=function(){Uo||(Uo=!0,Ec=l),pc(e,n)},r}function dv(e,n,r){r=Ut(-1,r),r.tag=3;var l=e.type.getDerivedStateFromError;if(typeof l=="function"){var o=n.value;r.payload=function(){return pc(e,n),l(o)}}var f=e.stateNode;return f!==null&&typeof f.componentDidCatch=="function"&&(r.callback=function(){typeof l!="function"&&(Yn===null?Yn=new Set([this]):Yn.add(this),pc(e,n));var c=n.stack;this.componentDidCatch(n.value,{componentStack:c!==null?c:""})}),r}var L2=typeof WeakSet=="function"?WeakSet:Set;function pv(e){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){Kt(e,r)}else n.current=null}function P2(e,n){switch(n.tag){case 0:case 11:case 15:case 22:return;case 1:if(n.flags&256&&e!==null){var r=e.memoizedProps,l=e.memoizedState;e=n.stateNode,n=e.getSnapshotBeforeUpdate(n.elementType===n.type?r:Dn(n.type,r),l),e.__reactInternalSnapshotBeforeUpdate=n}return;case 3:n.flags&256&&Ua(n.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(I(163))}function A2(e,n,r){switch(r.tag){case 0:case 11:case 15:case 22:if(n=r.updateQueue,n=n!==null?n.lastEffect:null,n!==null){e=n=n.next;do{if((e.tag&3)==3){var l=e.create;e.destroy=l()}e=e.next}while(e!==n)}if(n=r.updateQueue,n=n!==null?n.lastEffect:null,n!==null){e=n=n.next;do{var o=e;l=o.next,o=o.tag,(o&4)!=0&&(o&1)!=0&&(Lv(r,e),z2(r,e)),e=l}while(e!==n)}return;case 1:e=r.stateNode,r.flags&4&&(n===null?e.componentDidMount():(l=r.elementType===r.type?n.memoizedProps:Dn(r.type,n.memoizedProps),e.componentDidUpdate(l,n.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),n=r.updateQueue,n!==null&&Pg(r,n,e);return;case 3:if(n=r.updateQueue,n!==null){if(e=null,r.child!==null)switch(r.child.tag){case 5:e=r.child.stateNode;break;case 1:e=r.child.stateNode}Pg(r,n,e)}return;case 5:e=r.stateNode,n===null&&r.flags&4&&ag(r.type,r.memoizedProps)&&e.focus();return;case 6:return;case 4:return;case 12:return;case 13:r.memoizedState===null&&(r=r.alternate,r!==null&&(r=r.memoizedState,r!==null&&(r=r.dehydrated,r!==null&&T0(r))));return;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(I(163))}function hv(e,n){for(var r=e;;){if(r.tag===5){var l=r.stateNode;if(n)l=l.style,typeof l.setProperty=="function"?l.setProperty("display","none","important"):l.display="none";else{l=r.stateNode;var o=r.memoizedProps.style;o=o!=null&&o.hasOwnProperty("display")?o.display:null,l.style.display=f0("display",o)}}else if(r.tag===6)r.stateNode.nodeValue=n?"":r.memoizedProps;else if((r.tag!==23&&r.tag!==24||r.memoizedState===null||r===e)&&r.child!==null){r.child.return=r,r=r.child;continue}if(r===e)break;for(;r.sibling===null;){if(r.return===null||r.return===e)return;r=r.return}r.sibling.return=r.return,r=r.sibling}}function gv(e,n){if(dr&&typeof dr.onCommitFiberUnmount=="function")try{dr.onCommitFiberUnmount(Wa,n)}catch(f){}switch(n.tag){case 0:case 11:case 14:case 15:case 22:if(e=n.updateQueue,e!==null&&(e=e.lastEffect,e!==null)){var r=e=e.next;do{var l=r,o=l.destroy;if(l=l.tag,o!==void 0)if((l&4)!=0)Lv(n,r);else{l=n;try{o()}catch(f){Kt(l,f)}}r=r.next}while(r!==e)}break;case 1:if(pv(n),e=n.stateNode,typeof e.componentWillUnmount=="function")try{e.props=n.memoizedProps,e.state=n.memoizedState,e.componentWillUnmount()}catch(f){Kt(n,f)}break;case 5:pv(n);break;case 4:_v(e,n)}}function vv(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function mv(e){return e.tag===5||e.tag===3||e.tag===4}function yv(e){e:{for(var n=e.return;n!==null;){if(mv(n))break e;n=n.return}throw Error(I(160))}var r=n;switch(n=r.stateNode,r.tag){case 5:var l=!1;break;case 3:n=n.containerInfo,l=!0;break;case 4:n=n.containerInfo,l=!0;break;default:throw Error(I(161))}r.flags&16&&(Xi(n,""),r.flags&=-17);e:n:for(r=e;;){for(;r.sibling===null;){if(r.return===null||mv(r.return)){r=null;break e}r=r.return}for(r.sibling.return=r.return,r=r.sibling;r.tag!==5&&r.tag!==6&&r.tag!==18;){if(r.flags&2||r.child===null||r.tag===4)continue n;r.child.return=r,r=r.child}if(!(r.flags&2)){r=r.stateNode;break e}}l?hc(e,r,n):gc(e,r,n)}function hc(e,n,r){var l=e.tag,o=l===5||l===6;if(o)e=o?e.stateNode:e.stateNode.instance,n?r.nodeType===8?r.parentNode.insertBefore(e,n):r.insertBefore(e,n):(r.nodeType===8?(n=r.parentNode,n.insertBefore(e,r)):(n=r,n.appendChild(e)),r=r._reactRootContainer,r!=null||n.onclick!==null||(n.onclick=ao));else if(l!==4&&(e=e.child,e!==null))for(hc(e,n,r),e=e.sibling;e!==null;)hc(e,n,r),e=e.sibling}function gc(e,n,r){var l=e.tag,o=l===5||l===6;if(o)e=o?e.stateNode:e.stateNode.instance,n?r.insertBefore(e,n):r.appendChild(e);else if(l!==4&&(e=e.child,e!==null))for(gc(e,n,r),e=e.sibling;e!==null;)gc(e,n,r),e=e.sibling}function _v(e,n){for(var r=n,l=!1,o,f;;){if(!l){l=r.return;e:for(;;){if(l===null)throw Error(I(160));switch(o=l.stateNode,l.tag){case 5:f=!1;break e;case 3:o=o.containerInfo,f=!0;break e;case 4:o=o.containerInfo,f=!0;break e}l=l.return}l=!0}if(r.tag===5||r.tag===6){e:for(var c=e,p=r,g=p;;)if(gv(c,g),g.child!==null&&g.tag!==4)g.child.return=g,g=g.child;else{if(g===p)break e;for(;g.sibling===null;){if(g.return===null||g.return===p)break e;g=g.return}g.sibling.return=g.return,g=g.sibling}f?(c=o,p=r.stateNode,c.nodeType===8?c.parentNode.removeChild(p):c.removeChild(p)):o.removeChild(r.stateNode)}else if(r.tag===4){if(r.child!==null){o=r.stateNode.containerInfo,f=!0,r.child.return=r,r=r.child;continue}}else if(gv(e,r),r.child!==null){r.child.return=r,r=r.child;continue}if(r===n)break;for(;r.sibling===null;){if(r.return===null||r.return===n)return;r=r.return,r.tag===4&&(l=!1)}r.sibling.return=r.return,r=r.sibling}}function vc(e,n){switch(n.tag){case 0:case 11:case 14:case 15:case 22:var r=n.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var l=r=r.next;do(l.tag&3)==3&&(e=l.destroy,l.destroy=void 0,e!==void 0&&e()),l=l.next;while(l!==r)}return;case 1:return;case 5:if(r=n.stateNode,r!=null){l=n.memoizedProps;var o=e!==null?e.memoizedProps:l;e=n.type;var f=n.updateQueue;if(n.updateQueue=null,f!==null){for(r[po]=l,e==="input"&&l.type==="radio"&&l.name!=null&&t0(r,l),ia(e,o),n=ia(e,l),o=0;oo&&(o=c),r&=~f}if(r=o,r=He()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*I2(r/1960))-r,10 component higher in the tree to provide a loading indicator or placeholder to display.`)}Fe!==5&&(Fe=2),g=dc(g,p),R=c;do{switch(R.tag){case 3:f=g,R.flags|=4096,n&=-n,R.lanes|=n;var V=cv(R,f,n);Lg(R,V);break e;case 1:f=g;var D=R.type,Q=R.stateNode;if((R.flags&64)==0&&(typeof D.getDerivedStateFromError=="function"||Q!==null&&typeof Q.componentDidCatch=="function"&&(Yn===null||!Yn.has(Q)))){R.flags|=4096,n&=-n,R.lanes|=n;var b=dv(R,f,n);Lg(R,b);break e}}R=R.return}while(R!==null)}Rv(r)}catch(X){n=X,Pe===r&&r!==null&&(Pe=r=r.return);continue}break}while(1)}function kv(){var e=Do.current;return Do.current=No,e===null?No:e}function Nu(e,n){var r=Y;Y|=16;var l=kv();Ye===e&&Ve===n||ci(e,n);do try{M2();break}catch(o){Cv(e,o)}while(1);if(ja(),Y=r,Do.current=l,Pe!==null)throw Error(I(261));return Ye=null,Ve=0,Fe}function M2(){for(;Pe!==null;)Tv(Pe)}function D2(){for(;Pe!==null&&!v2();)Tv(Pe)}function Tv(e){var n=Av(e.alternate,e,mr);e.memoizedProps=e.pendingProps,n===null?Rv(e):Pe=n,mc.current=null}function Rv(e){var n=e;do{var r=n.alternate;if(e=n.return,(n.flags&2048)==0){if(r=k2(r,n,mr),r!==null){Pe=r;return}if(r=n,r.tag!==24&&r.tag!==23||r.memoizedState===null||(mr&1073741824)!=0||(r.mode&4)==0){for(var l=0,o=r.child;o!==null;)l|=o.lanes|o.childLanes,o=o.sibling;r.childLanes=l}e!==null&&(e.flags&2048)==0&&(e.firstEffect===null&&(e.firstEffect=n.firstEffect),n.lastEffect!==null&&(e.lastEffect!==null&&(e.lastEffect.nextEffect=n.firstEffect),e.lastEffect=n.lastEffect),1c&&(p=c,c=V,V=p),p=Z0(w,V),f=Z0(w,c),p&&f&&(L.rangeCount!==1||L.anchorNode!==p.node||L.anchorOffset!==p.offset||L.focusNode!==f.node||L.focusOffset!==f.offset)&&(k=k.createRange(),k.setStart(p.node,p.offset),L.removeAllRanges(),V>c?(L.addRange(k),L.extend(f.node,f.offset)):(k.setEnd(f.node,f.offset),L.addRange(k)))))),k=[],L=w;L=L.parentNode;)L.nodeType===1&&k.push({element:L,left:L.scrollLeft,top:L.scrollTop});for(typeof w.focus=="function"&&w.focus(),w=0;wHe()-xc?ci(e,0):_c|=r),kn(e,n)}function H2(e,n){var r=e.stateNode;r!==null&&r.delete(n),n=0,n===0&&(n=e.mode,(n&2)==0?n=1:(n&4)==0?n=ti()===99?1:2:(ct===0&&(ct=oi),n=jr(62914560&~ct),n===0&&(n=4194304))),r=cn(),e=Ho(e,n),e!==null&&(eo(e,n,r),kn(e,r))}var Av;Av=function(e,n,r){var l=n.lanes;if(e!==null)if(e.memoizedProps!==n.pendingProps||be.current)Fn=!0;else if((r&l)!=0)Fn=(e.flags&16384)!=0;else{switch(Fn=!1,n.tag){case 3:nv(n),ba();break;case 5:Fg(n);break;case 1:en(n.type)&&vo(n);break;case 4:Za(n,n.stateNode.containerInfo);break;case 10:l=n.memoizedProps.value;var o=n.type._context;Se(_o,o._currentValue),o._currentValue=l;break;case 13:if(n.memoizedState!==null)return(r&n.child.childLanes)!=0?tv(e,n,r):(Se(Ee,Ee.current&1),n=ft(e,n,r),n!==null?n.sibling:null);Se(Ee,Ee.current&1);break;case 19:if(l=(r&n.childLanes)!=0,(e.flags&64)!=0){if(l)return ov(e,n,r);n.flags|=64}if(o=n.memoizedState,o!==null&&(o.rendering=null,o.tail=null,o.lastEffect=null),Se(Ee,Ee.current),l)break;return null;case 23:case 24:return n.lanes=0,oc(e,n,r)}return ft(e,n,r)}else Fn=!1;switch(n.lanes=0,n.tag){case 2:if(l=n.type,e!==null&&(e.alternate=null,n.alternate=null,n.flags|=2),e=n.pendingProps,o=ni(n,We.current),ii(n,r),o=tc(null,n,l,e,o,r),n.flags|=1,typeof o=="object"&&o!==null&&typeof o.render=="function"&&o.$$typeof===void 0){if(n.tag=1,n.memoizedState=null,n.updateQueue=null,en(l)){var f=!0;vo(n)}else f=!1;n.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,Ya(n);var c=l.getDerivedStateFromProps;typeof c=="function"&&So(n,l,c,e),o.updater=Eo,n.stateNode=o,o._reactInternals=n,Xa(n,l,e,r),n=fc(null,n,l,!0,f,r)}else n.tag=0,tn(null,n,o,r),n=n.child;return n;case 16:o=n.elementType;e:{switch(e!==null&&(e.alternate=null,n.alternate=null,n.flags|=2),e=n.pendingProps,f=o._init,o=f(o._payload),n.type=o,f=n.tag=V2(o),e=Dn(o,e),f){case 0:n=sc(null,n,o,e,r);break e;case 1:n=ev(null,n,o,e,r);break e;case 11:n=Zg(null,n,o,e,r);break e;case 14:n=qg(null,n,o,Dn(o.type,e),l,r);break e}throw Error(I(306,o,""))}return n;case 0:return l=n.type,o=n.pendingProps,o=n.elementType===l?o:Dn(l,o),sc(e,n,l,o,r);case 1:return l=n.type,o=n.pendingProps,o=n.elementType===l?o:Dn(l,o),ev(e,n,l,o,r);case 3:if(nv(n),l=n.updateQueue,e===null||l===null)throw Error(I(282));if(l=n.pendingProps,o=n.memoizedState,o=o!==null?o.element:null,Rg(e,n),vu(n,l,null,r),l=n.memoizedState.element,l===o)ba(),n=ft(e,n,r);else{if(o=n.stateNode,(f=o.hydrate)&&(Bt=qr(n.stateNode.containerInfo.firstChild),st=n,f=jn=!0),f){if(e=o.mutableSourceEagerHydrationData,e!=null)for(o=0;o{"use strict";function Mv(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__=="undefined"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Mv)}catch(e){console.error(e)}}Mv(),Dv.exports=Nv()});var Fc=Et((hi,zu)=>{(function(){var e,n="4.17.21",r=200,l="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",o="Expected a function",f="Invalid `variable` option passed into `_.template`",c="__lodash_hash_undefined__",p=500,g="__lodash_placeholder__",E=1,N=2,$=4,R=1,F=2,B=1,H=2,S=4,y=8,w=16,k=32,L=64,V=128,D=256,Q=512,b=30,X="...",Un=800,Xo=16,$c=1,Qv=2,Yv=3,Qt=1/0,dt=9007199254740991,Xv=17976931348623157e292,Bu=0/0,zn=4294967295,Zv=zn-1,qv=zn>>>1,Jv=[["ary",V],["bind",B],["bindKey",H],["curry",y],["curryRight",w],["flip",Q],["partial",k],["partialRight",L],["rearg",D]],_r="[object Arguments]",Wu="[object Array]",bv="[object AsyncFunction]",vi="[object Boolean]",mi="[object Date]",em="[object DOMException]",Hu="[object Error]",$u="[object Function]",Vc="[object GeneratorFunction]",Ln="[object Map]",yi="[object Number]",nm="[object Null]",Xn="[object Object]",Kc="[object Promise]",tm="[object Proxy]",_i="[object RegExp]",Pn="[object Set]",wi="[object String]",Vu="[object Symbol]",rm="[object Undefined]",xi="[object WeakMap]",im="[object WeakSet]",Si="[object ArrayBuffer]",wr="[object DataView]",Zo="[object Float32Array]",qo="[object Float64Array]",Jo="[object Int8Array]",bo="[object Int16Array]",es="[object Int32Array]",ns="[object Uint8Array]",ts="[object Uint8ClampedArray]",rs="[object Uint16Array]",is="[object Uint32Array]",um=/\b__p \+= '';/g,lm=/\b(__p \+=) '' \+/g,om=/(__e\(.*?\)|\b__t\)) \+\n'';/g,Gc=/&(?:amp|lt|gt|quot|#39);/g,jc=/[&<>"']/g,sm=RegExp(Gc.source),fm=RegExp(jc.source),am=/<%-([\s\S]+?)%>/g,cm=/<%([\s\S]+?)%>/g,Qc=/<%=([\s\S]+?)%>/g,dm=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,pm=/^\w*$/,hm=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,us=/[\\^$.*+?()[\]{}|]/g,gm=RegExp(us.source),ls=/^\s+/,vm=/\s/,mm=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,ym=/\{\n\/\* \[wrapped with (.+)\] \*/,_m=/,? & /,wm=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,xm=/[()=,{}\[\]\/\s]/,Sm=/\\(\\)?/g,Em=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Yc=/\w*$/,Cm=/^[-+]0x[0-9a-f]+$/i,km=/^0b[01]+$/i,Tm=/^\[object .+?Constructor\]$/,Rm=/^0o[0-7]+$/i,Lm=/^(?:0|[1-9]\d*)$/,Pm=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Ku=/($^)/,Am=/['\n\r\u2028\u2029\\]/g,Gu="\\ud800-\\udfff",Om="\\u0300-\\u036f",Im="\\ufe20-\\ufe2f",Nm="\\u20d0-\\u20ff",Xc=Om+Im+Nm,Zc="\\u2700-\\u27bf",qc="a-z\\xdf-\\xf6\\xf8-\\xff",Mm="\\xac\\xb1\\xd7\\xf7",Dm="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",Fm="\\u2000-\\u206f",Um=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Jc="A-Z\\xc0-\\xd6\\xd8-\\xde",bc="\\ufe0e\\ufe0f",ed=Mm+Dm+Fm+Um,os="['\u2019]",zm="["+Gu+"]",nd="["+ed+"]",ju="["+Xc+"]",td="\\d+",Bm="["+Zc+"]",rd="["+qc+"]",id="[^"+Gu+ed+td+Zc+qc+Jc+"]",ss="\\ud83c[\\udffb-\\udfff]",Wm="(?:"+ju+"|"+ss+")",ud="[^"+Gu+"]",fs="(?:\\ud83c[\\udde6-\\uddff]){2}",as="[\\ud800-\\udbff][\\udc00-\\udfff]",xr="["+Jc+"]",ld="\\u200d",od="(?:"+rd+"|"+id+")",Hm="(?:"+xr+"|"+id+")",sd="(?:"+os+"(?:d|ll|m|re|s|t|ve))?",fd="(?:"+os+"(?:D|LL|M|RE|S|T|VE))?",ad=Wm+"?",cd="["+bc+"]?",$m="(?:"+ld+"(?:"+[ud,fs,as].join("|")+")"+cd+ad+")*",Vm="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Km="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",dd=cd+ad+$m,Gm="(?:"+[Bm,fs,as].join("|")+")"+dd,jm="(?:"+[ud+ju+"?",ju,fs,as,zm].join("|")+")",Qm=RegExp(os,"g"),Ym=RegExp(ju,"g"),cs=RegExp(ss+"(?="+ss+")|"+jm+dd,"g"),Xm=RegExp([xr+"?"+rd+"+"+sd+"(?="+[nd,xr,"$"].join("|")+")",Hm+"+"+fd+"(?="+[nd,xr+od,"$"].join("|")+")",xr+"?"+od+"+"+sd,xr+"+"+fd,Km,Vm,td,Gm].join("|"),"g"),Zm=RegExp("["+ld+Gu+Xc+bc+"]"),qm=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Jm=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],bm=-1,he={};he[Zo]=he[qo]=he[Jo]=he[bo]=he[es]=he[ns]=he[ts]=he[rs]=he[is]=!0,he[_r]=he[Wu]=he[Si]=he[vi]=he[wr]=he[mi]=he[Hu]=he[$u]=he[Ln]=he[yi]=he[Xn]=he[_i]=he[Pn]=he[wi]=he[xi]=!1;var de={};de[_r]=de[Wu]=de[Si]=de[wr]=de[vi]=de[mi]=de[Zo]=de[qo]=de[Jo]=de[bo]=de[es]=de[Ln]=de[yi]=de[Xn]=de[_i]=de[Pn]=de[wi]=de[Vu]=de[ns]=de[ts]=de[rs]=de[is]=!0,de[Hu]=de[$u]=de[xi]=!1;var e1={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},n1={"&":"&","<":"<",">":">",'"':""","'":"'"},t1={"&":"&","<":"<",">":">",""":'"',"'":"'"},r1={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},i1=parseFloat,u1=parseInt,pd=typeof global=="object"&&global&&global.Object===Object&&global,l1=typeof self=="object"&&self&&self.Object===Object&&self,Ae=pd||l1||Function("return this")(),ds=typeof hi=="object"&&hi&&!hi.nodeType&&hi,Yt=ds&&typeof zu=="object"&&zu&&!zu.nodeType&&zu,hd=Yt&&Yt.exports===ds,ps=hd&&pd.process,dn=function(){try{var _=Yt&&Yt.require&&Yt.require("util").types;return _||ps&&ps.binding&&ps.binding("util")}catch(T){}}(),gd=dn&&dn.isArrayBuffer,vd=dn&&dn.isDate,md=dn&&dn.isMap,yd=dn&&dn.isRegExp,_d=dn&&dn.isSet,wd=dn&&dn.isTypedArray;function rn(_,T,C){switch(C.length){case 0:return _.call(T);case 1:return _.call(T,C[0]);case 2:return _.call(T,C[0],C[1]);case 3:return _.call(T,C[0],C[1],C[2])}return _.apply(T,C)}function o1(_,T,C,U){for(var Z=-1,le=_==null?0:_.length;++Z-1}function hs(_,T,C){for(var U=-1,Z=_==null?0:_.length;++U-1;);return C}function Ld(_,T){for(var C=_.length;C--&&Sr(T,_[C],0)>-1;);return C}function v1(_,T){for(var C=_.length,U=0;C--;)_[C]===T&&++U;return U}var m1=ys(e1),y1=ys(n1);function _1(_){return"\\"+r1[_]}function w1(_,T){return _==null?e:_[T]}function Er(_){return Zm.test(_)}function x1(_){return qm.test(_)}function S1(_){for(var T,C=[];!(T=_.next()).done;)C.push(T.value);return C}function Ss(_){var T=-1,C=Array(_.size);return _.forEach(function(U,Z){C[++T]=[Z,U]}),C}function Pd(_,T){return function(C){return _(T(C))}}function gt(_,T){for(var C=-1,U=_.length,Z=0,le=[];++C-1}function fy(t,i){var u=this.__data__,s=al(u,t);return s<0?(++this.size,u.push([t,i])):u[s][1]=i,this}Zn.prototype.clear=uy,Zn.prototype.delete=ly,Zn.prototype.get=oy,Zn.prototype.has=sy,Zn.prototype.set=fy;function qn(t){var i=-1,u=t==null?0:t.length;for(this.clear();++i=i?t:i)),t}function vn(t,i,u,s,a,h){var v,m=i&E,x=i&N,P=i&$;if(u&&(v=a?u(t,s,a,h):u(t)),v!==e)return v;if(!we(t))return t;var A=q(t);if(A){if(v=p_(t),!m)return Xe(t,v)}else{var O=ze(t),M=O==$u||O==Vc;if(St(t))return cp(t,m);if(O==Xn||O==_r||M&&!a){if(v=x||M?{}:Ap(t),!m)return x?t_(t,ky(v,t)):n_(t,Hd(v,t))}else{if(!de[O])return a?t:{};v=h_(t,O,m)}}h||(h=new On);var W=h.get(t);if(W)return W;h.set(t,v),uh(t)?t.forEach(function(j){v.add(vn(j,i,u,j,t,h))}):rh(t)&&t.forEach(function(j,te){v.set(te,vn(j,i,u,te,t,h))});var G=P?x?Ys:Qs:x?qe:Oe,ee=A?e:G(t);return pn(ee||t,function(j,te){ee&&(te=j,j=t[te]),Pi(v,te,vn(j,i,u,te,t,h))}),v}function Ty(t){var i=Oe(t);return function(u){return $d(u,t,i)}}function $d(t,i,u){var s=u.length;if(t==null)return!s;for(t=oe(t);s--;){var a=u[s],h=i[a],v=t[a];if(v===e&&!(a in t)||!h(v))return!1}return!0}function Vd(t,i,u){if(typeof t!="function")throw new hn(o);return Fi(function(){t.apply(e,u)},i)}function Ai(t,i,u,s){var a=-1,h=Qu,v=!0,m=t.length,x=[],P=i.length;if(!m)return x;u&&(i=me(i,un(u))),s?(h=hs,v=!1):i.length>=r&&(h=Ei,v=!1,i=new qt(i));e:for(;++aa?0:a+u),s=s===e||s>a?a:J(s),s<0&&(s+=a),s=u>s?0:oh(s);u0&&u(m)?i>1?Ne(m,i-1,u,s,a):ht(a,m):s||(a[a.length]=m)}return a}var Ps=mp(),jd=mp(!0);function Bn(t,i){return t&&Ps(t,i,Oe)}function As(t,i){return t&&jd(t,i,Oe)}function dl(t,i){return pt(i,function(u){return tt(t[u])})}function bt(t,i){i=wt(i,t);for(var u=0,s=i.length;t!=null&&ui}function Py(t,i){return t!=null&&ae.call(t,i)}function Ay(t,i){return t!=null&&i in oe(t)}function Oy(t,i,u){return t>=Ue(i,u)&&t=120&&A.length>=120)?new qt(v&&A):e}A=t[0];var O=-1,M=m[0];e:for(;++O-1;)m!==t&&rl.call(m,x,1),rl.call(t,x,1);return t}function rp(t,i){for(var u=t?i.length:0,s=u-1;u--;){var a=i[u];if(u==s||a!==h){var h=a;nt(a)?rl.call(t,a,1):Ws(t,a)}}return t}function Us(t,i){return t+ll(Ud()*(i-t+1))}function Ky(t,i,u,s){for(var a=-1,h=Re(ul((i-t)/(u||1)),0),v=C(h);h--;)v[s?h:++a]=t,t+=u;return v}function zs(t,i){var u="";if(!t||i<1||i>dt)return u;do i%2&&(u+=t),i=ll(i/2),i&&(t+=t);while(i);return u}function ne(t,i){return nf(Np(t,i,Je),t+"")}function Gy(t){return Wd(Nr(t))}function jy(t,i){var u=Nr(t);return El(u,Jt(i,0,u.length))}function Ni(t,i,u,s){if(!we(t))return t;i=wt(i,t);for(var a=-1,h=i.length,v=h-1,m=t;m!=null&&++aa?0:a+i),u=u>a?a:u,u<0&&(u+=a),a=i>u?0:u-i>>>0,i>>>=0;for(var h=C(a);++s>>1,v=t[h];v!==null&&!on(v)&&(u?v<=i:v=r){var P=i?null:l_(t);if(P)return Xu(P);v=!1,a=Ei,x=new qt}else x=i?[]:m;e:for(;++s=s?t:mn(t,i,u)}var ap=U1||function(t){return Ae.clearTimeout(t)};function cp(t,i){if(i)return t.slice();var u=t.length,s=Id?Id(u):new t.constructor(u);return t.copy(s),s}function Ks(t){var i=new t.constructor(t.byteLength);return new nl(i).set(new nl(t)),i}function qy(t,i){var u=i?Ks(t.buffer):t.buffer;return new t.constructor(u,t.byteOffset,t.byteLength)}function Jy(t){var i=new t.constructor(t.source,Yc.exec(t));return i.lastIndex=t.lastIndex,i}function by(t){return Li?oe(Li.call(t)):{}}function dp(t,i){var u=i?Ks(t.buffer):t.buffer;return new t.constructor(u,t.byteOffset,t.length)}function pp(t,i){if(t!==i){var u=t!==e,s=t===null,a=t===t,h=on(t),v=i!==e,m=i===null,x=i===i,P=on(i);if(!m&&!P&&!h&&t>i||h&&v&&x&&!m&&!P||s&&v&&x||!u&&x||!a)return 1;if(!s&&!h&&!P&&t=m)return x;var P=u[s];return x*(P=="desc"?-1:1)}}return t.index-i.index}function hp(t,i,u,s){for(var a=-1,h=t.length,v=u.length,m=-1,x=i.length,P=Re(h-v,0),A=C(x+P),O=!s;++m1?u[a-1]:e,v=a>2?u[2]:e;for(h=t.length>3&&typeof h=="function"?(a--,h):e,v&&Ge(u[0],u[1],v)&&(h=a<3?e:h,a=1),i=oe(i);++s-1?a[h?i[v]:v]:e}}function wp(t){return et(function(i){var u=i.length,s=u,a=gn.prototype.thru;for(t&&i.reverse();s--;){var h=i[s];if(typeof h!="function")throw new hn(o);if(a&&!v&&xl(h)=="wrapper")var v=new gn([],!0)}for(s=v?s:u;++s1&&ie.reverse(),A&&xm))return!1;var P=h.get(t),A=h.get(i);if(P&&A)return P==i&&A==t;var O=-1,M=!0,W=u&F?new qt:e;for(h.set(t,i),h.set(i,t);++O1?"& ":"")+i[s],i=i.join(u>2?", ":" "),t.replace(mm,`{ 10 | /* [wrapped with `+i+`] */ 11 | `)}function v_(t){return q(t)||tr(t)||!!(Dd&&t&&t[Dd])}function nt(t,i){var u=typeof t;return i=i??dt,!!i&&(u=="number"||u!="symbol"&&Lm.test(t))&&t>-1&&t%1==0&&t0){if(++i>=Un)return arguments[0]}else i=0;return t.apply(e,arguments)}}function El(t,i){var u=-1,s=t.length,a=s-1;for(i=i===e?s:i;++u1?t[i-1]:e;return u=typeof u=="function"?(t.pop(),u):e,Gp(t,u)});function jp(t){var i=d(t);return i.__chain__=!0,i}function Rw(t,i){return i(t),t}function Cl(t,i){return i(t)}var Lw=et(function(t){var i=t.length,u=i?t[0]:0,s=this.__wrapped__,a=function(h){return Ls(h,t)};return i>1||this.__actions__.length||!(s instanceof re)||!nt(u)?this.thru(a):(s=s.slice(u,+u+(i?1:0)),s.__actions__.push({func:Cl,args:[a],thisArg:e}),new gn(s,this.__chain__).thru(function(h){return i&&!h.length&&h.push(e),h}))});function Pw(){return jp(this)}function Aw(){return new gn(this.value(),this.__chain__)}function Ow(){this.__values__===e&&(this.__values__=lh(this.value()));var t=this.__index__>=this.__values__.length,i=t?e:this.__values__[this.__index__++];return{done:t,value:i}}function Iw(){return this}function Nw(t){for(var i,u=this;u instanceof fl;){var s=Bp(u);s.__index__=0,s.__values__=e,i?a.__wrapped__=s:i=s;var a=s;u=u.__wrapped__}return a.__wrapped__=t,i}function Mw(){var t=this.__wrapped__;if(t instanceof re){var i=t;return this.__actions__.length&&(i=new re(this)),i=i.reverse(),i.__actions__.push({func:Cl,args:[tf],thisArg:e}),new gn(i,this.__chain__)}return this.thru(tf)}function Dw(){return sp(this.__wrapped__,this.__actions__)}var Fw=vl(function(t,i,u){ae.call(t,u)?++t[u]:Jn(t,u,1)});function Uw(t,i,u){var s=q(t)?xd:Ry;return u&&Ge(t,i,u)&&(i=e),s(t,K(i,3))}function zw(t,i){var u=q(t)?pt:Gd;return u(t,K(i,3))}var Bw=_p(Wp),Ww=_p(Hp);function Hw(t,i){return Ne(kl(t,i),1)}function $w(t,i){return Ne(kl(t,i),Qt)}function Vw(t,i,u){return u=u===e?1:J(u),Ne(kl(t,i),u)}function Qp(t,i){var u=q(t)?pn:yt;return u(t,K(i,3))}function Yp(t,i){var u=q(t)?s1:Kd;return u(t,K(i,3))}var Kw=vl(function(t,i,u){ae.call(t,u)?t[u].push(i):Jn(t,u,[i])});function Gw(t,i,u,s){t=Ze(t)?t:Nr(t),u=u&&!s?J(u):0;var a=t.length;return u<0&&(u=Re(a+u,0)),Al(t)?u<=a&&t.indexOf(i,u)>-1:!!a&&Sr(t,i,u)>-1}var jw=ne(function(t,i,u){var s=-1,a=typeof i=="function",h=Ze(t)?C(t.length):[];return yt(t,function(v){h[++s]=a?rn(i,v,u):Oi(v,i,u)}),h}),Qw=vl(function(t,i,u){Jn(t,u,i)});function kl(t,i){var u=q(t)?me:qd;return u(t,K(i,3))}function Yw(t,i,u,s){return t==null?[]:(q(i)||(i=i==null?[]:[i]),u=s?e:u,q(u)||(u=u==null?[]:[u]),np(t,i,u))}var Xw=vl(function(t,i,u){t[u?0:1].push(i)},function(){return[[],[]]});function Zw(t,i,u){var s=q(t)?gs:kd,a=arguments.length<3;return s(t,K(i,4),u,a,yt)}function qw(t,i,u){var s=q(t)?f1:kd,a=arguments.length<3;return s(t,K(i,4),u,a,Kd)}function Jw(t,i){var u=q(t)?pt:Gd;return u(t,Ll(K(i,3)))}function bw(t){var i=q(t)?Wd:Gy;return i(t)}function ex(t,i,u){(u?Ge(t,i,u):i===e)?i=1:i=J(i);var s=q(t)?Sy:jy;return s(t,i)}function nx(t){var i=q(t)?Ey:Yy;return i(t)}function tx(t){if(t==null)return 0;if(Ze(t))return Al(t)?Cr(t):t.length;var i=ze(t);return i==Ln||i==Pn?t.size:Ms(t).length}function rx(t,i,u){var s=q(t)?vs:Xy;return u&&Ge(t,i,u)&&(i=e),s(t,K(i,3))}var ix=ne(function(t,i){if(t==null)return[];var u=i.length;return u>1&&Ge(t,i[0],i[1])?i=[]:u>2&&Ge(i[0],i[1],i[2])&&(i=[i[0]]),np(t,Ne(i,1),[])}),Tl=z1||function(){return Ae.Date.now()};function ux(t,i){if(typeof i!="function")throw new hn(o);return t=J(t),function(){if(--t<1)return i.apply(this,arguments)}}function Xp(t,i,u){return i=u?e:i,i=t&&i==null?t.length:i,bn(t,V,e,e,e,e,i)}function Zp(t,i){var u;if(typeof i!="function")throw new hn(o);return t=J(t),function(){return--t>0&&(u=i.apply(this,arguments)),t<=1&&(i=e),u}}var uf=ne(function(t,i,u){var s=B;if(u.length){var a=gt(u,Or(uf));s|=k}return bn(t,s,i,u,a)}),qp=ne(function(t,i,u){var s=B|H;if(u.length){var a=gt(u,Or(qp));s|=k}return bn(i,s,t,u,a)});function Jp(t,i,u){i=u?e:i;var s=bn(t,y,e,e,e,e,e,i);return s.placeholder=Jp.placeholder,s}function bp(t,i,u){i=u?e:i;var s=bn(t,w,e,e,e,e,e,i);return s.placeholder=bp.placeholder,s}function eh(t,i,u){var s,a,h,v,m,x,P=0,A=!1,O=!1,M=!0;if(typeof t!="function")throw new hn(o);i=_n(i)||0,we(u)&&(A=!!u.leading,O="maxWait"in u,h=O?Re(_n(u.maxWait)||0,i):h,M="trailing"in u?!!u.trailing:M);function W(ke){var Nn=s,it=a;return s=a=e,P=ke,v=t.apply(it,Nn),v}function G(ke){return P=ke,m=Fi(te,i),A?W(ke):v}function ee(ke){var Nn=ke-x,it=ke-P,_h=i-Nn;return O?Ue(_h,h-it):_h}function j(ke){var Nn=ke-x,it=ke-P;return x===e||Nn>=i||Nn<0||O&&it>=h}function te(){var ke=Tl();if(j(ke))return ie(ke);m=Fi(te,ee(ke))}function ie(ke){return m=e,M&&s?W(ke):(s=a=e,v)}function sn(){m!==e&&ap(m),P=0,s=x=a=m=e}function je(){return m===e?v:ie(Tl())}function fn(){var ke=Tl(),Nn=j(ke);if(s=arguments,a=this,x=ke,Nn){if(m===e)return G(x);if(O)return ap(m),m=Fi(te,i),W(x)}return m===e&&(m=Fi(te,i)),v}return fn.cancel=sn,fn.flush=je,fn}var lx=ne(function(t,i){return Vd(t,1,i)}),ox=ne(function(t,i,u){return Vd(t,_n(i)||0,u)});function sx(t){return bn(t,Q)}function Rl(t,i){if(typeof t!="function"||i!=null&&typeof i!="function")throw new hn(o);var u=function(){var s=arguments,a=i?i.apply(this,s):s[0],h=u.cache;if(h.has(a))return h.get(a);var v=t.apply(this,s);return u.cache=h.set(a,v)||h,v};return u.cache=new(Rl.Cache||qn),u}Rl.Cache=qn;function Ll(t){if(typeof t!="function")throw new hn(o);return function(){var i=arguments;switch(i.length){case 0:return!t.call(this);case 1:return!t.call(this,i[0]);case 2:return!t.call(this,i[0],i[1]);case 3:return!t.call(this,i[0],i[1],i[2])}return!t.apply(this,i)}}function fx(t){return Zp(2,t)}var ax=Zy(function(t,i){i=i.length==1&&q(i[0])?me(i[0],un(K())):me(Ne(i,1),un(K()));var u=i.length;return ne(function(s){for(var a=-1,h=Ue(s.length,u);++a=i}),tr=Yd(function(){return arguments}())?Yd:function(t){return xe(t)&&ae.call(t,"callee")&&!Md.call(t,"callee")},q=C.isArray,kx=gd?un(gd):Ny;function Ze(t){return t!=null&&Pl(t.length)&&!tt(t)}function Ce(t){return xe(t)&&Ze(t)}function Tx(t){return t===!0||t===!1||xe(t)&&Ke(t)==vi}var St=W1||mf,Rx=vd?un(vd):My;function Lx(t){return xe(t)&&t.nodeType===1&&!Ui(t)}function Px(t){if(t==null)return!0;if(Ze(t)&&(q(t)||typeof t=="string"||typeof t.splice=="function"||St(t)||Ir(t)||tr(t)))return!t.length;var i=ze(t);if(i==Ln||i==Pn)return!t.size;if(Di(t))return!Ms(t).length;for(var u in t)if(ae.call(t,u))return!1;return!0}function Ax(t,i){return Ii(t,i)}function Ox(t,i,u){u=typeof u=="function"?u:e;var s=u?u(t,i):e;return s===e?Ii(t,i,e,u):!!s}function of(t){if(!xe(t))return!1;var i=Ke(t);return i==Hu||i==em||typeof t.message=="string"&&typeof t.name=="string"&&!Ui(t)}function Ix(t){return typeof t=="number"&&Fd(t)}function tt(t){if(!we(t))return!1;var i=Ke(t);return i==$u||i==Vc||i==bv||i==tm}function th(t){return typeof t=="number"&&t==J(t)}function Pl(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=dt}function we(t){var i=typeof t;return t!=null&&(i=="object"||i=="function")}function xe(t){return t!=null&&typeof t=="object"}var rh=md?un(md):Fy;function Nx(t,i){return t===i||Ns(t,i,Zs(i))}function Mx(t,i,u){return u=typeof u=="function"?u:e,Ns(t,i,Zs(i),u)}function Dx(t){return ih(t)&&t!=+t}function Fx(t){if(__(t))throw new Z(l);return Xd(t)}function Ux(t){return t===null}function zx(t){return t==null}function ih(t){return typeof t=="number"||xe(t)&&Ke(t)==yi}function Ui(t){if(!xe(t)||Ke(t)!=Xn)return!1;var i=tl(t);if(i===null)return!0;var u=ae.call(i,"constructor")&&i.constructor;return typeof u=="function"&&u instanceof u&&Ju.call(u)==M1}var sf=yd?un(yd):Uy;function Bx(t){return th(t)&&t>=-dt&&t<=dt}var uh=_d?un(_d):zy;function Al(t){return typeof t=="string"||!q(t)&&xe(t)&&Ke(t)==wi}function on(t){return typeof t=="symbol"||xe(t)&&Ke(t)==Vu}var Ir=wd?un(wd):By;function Wx(t){return t===e}function Hx(t){return xe(t)&&ze(t)==xi}function $x(t){return xe(t)&&Ke(t)==im}var Vx=wl(Ds),Kx=wl(function(t,i){return t<=i});function lh(t){if(!t)return[];if(Ze(t))return Al(t)?An(t):Xe(t);if(Ci&&t[Ci])return S1(t[Ci]());var i=ze(t),u=i==Ln?Ss:i==Pn?Xu:Nr;return u(t)}function rt(t){if(!t)return t===0?t:0;if(t=_n(t),t===Qt||t===-Qt){var i=t<0?-1:1;return i*Xv}return t===t?t:0}function J(t){var i=rt(t),u=i%1;return i===i?u?i-u:i:0}function oh(t){return t?Jt(J(t),0,zn):0}function _n(t){if(typeof t=="number")return t;if(on(t))return Bu;if(we(t)){var i=typeof t.valueOf=="function"?t.valueOf():t;t=we(i)?i+"":i}if(typeof t!="string")return t===0?t:+t;t=Td(t);var u=km.test(t);return u||Rm.test(t)?u1(t.slice(2),u?2:8):Cm.test(t)?Bu:+t}function sh(t){return Wn(t,qe(t))}function Gx(t){return t?Jt(J(t),-dt,dt):t===0?t:0}function se(t){return t==null?"":ln(t)}var jx=Pr(function(t,i){if(Di(i)||Ze(i)){Wn(i,Oe(i),t);return}for(var u in i)ae.call(i,u)&&Pi(t,u,i[u])}),fh=Pr(function(t,i){Wn(i,qe(i),t)}),Ol=Pr(function(t,i,u,s){Wn(i,qe(i),t,s)}),Qx=Pr(function(t,i,u,s){Wn(i,Oe(i),t,s)}),Yx=et(Ls);function Xx(t,i){var u=Lr(t);return i==null?u:Hd(u,i)}var Zx=ne(function(t,i){t=oe(t);var u=-1,s=i.length,a=s>2?i[2]:e;for(a&&Ge(i[0],i[1],a)&&(s=1);++u1),h}),Wn(t,Ys(t),u),s&&(u=vn(u,E|N|$,o_));for(var a=i.length;a--;)Ws(u,i[a]);return u});function hS(t,i){return ch(t,Ll(K(i)))}var gS=et(function(t,i){return t==null?{}:$y(t,i)});function ch(t,i){if(t==null)return{};var u=me(Ys(t),function(s){return[s]});return i=K(i),tp(t,u,function(s,a){return i(s,a[0])})}function vS(t,i,u){i=wt(i,t);var s=-1,a=i.length;for(a||(a=1,t=e);++si){var s=t;t=i,i=s}if(u||t%1||i%1){var a=Ud();return Ue(t+a*(i-t+i1("1e-"+((a+"").length-1))),i)}return Us(t,i)}var RS=Ar(function(t,i,u){return i=i.toLowerCase(),t+(u?hh(i):i)});function hh(t){return cf(se(t).toLowerCase())}function gh(t){return t=se(t),t&&t.replace(Pm,m1).replace(Ym,"")}function LS(t,i,u){t=se(t),i=ln(i);var s=t.length;u=u===e?s:Jt(J(u),0,s);var a=u;return u-=i.length,u>=0&&t.slice(u,a)==i}function PS(t){return t=se(t),t&&fm.test(t)?t.replace(jc,y1):t}function AS(t){return t=se(t),t&&gm.test(t)?t.replace(us,"\\$&"):t}var OS=Ar(function(t,i,u){return t+(u?"-":"")+i.toLowerCase()}),IS=Ar(function(t,i,u){return t+(u?" ":"")+i.toLowerCase()}),NS=yp("toLowerCase");function MS(t,i,u){t=se(t),i=J(i);var s=i?Cr(t):0;if(!i||s>=i)return t;var a=(i-s)/2;return _l(ll(a),u)+t+_l(ul(a),u)}function DS(t,i,u){t=se(t),i=J(i);var s=i?Cr(t):0;return i&&s>>0,u?(t=se(t),t&&(typeof i=="string"||i!=null&&!sf(i))&&(i=ln(i),!i&&Er(t))?xt(An(t),0,u):t.split(i,u)):[]}var $S=Ar(function(t,i,u){return t+(u?" ":"")+cf(i)});function VS(t,i,u){return t=se(t),u=u==null?0:Jt(J(u),0,t.length),i=ln(i),t.slice(u,u+i.length)==i}function KS(t,i,u){var s=d.templateSettings;u&&Ge(t,i,u)&&(i=e),t=se(t),i=Ol({},i,s,kp);var a=Ol({},i.imports,s.imports,kp),h=Oe(a),v=xs(a,h),m,x,P=0,A=i.interpolate||Ku,O="__p += '",M=Es((i.escape||Ku).source+"|"+A.source+"|"+(A===Qc?Em:Ku).source+"|"+(i.evaluate||Ku).source+"|$","g"),W="//# sourceURL="+(ae.call(i,"sourceURL")?(i.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++bm+"]")+` 12 | `;t.replace(M,function(j,te,ie,sn,je,fn){return ie||(ie=sn),O+=t.slice(P,fn).replace(Am,_1),te&&(m=!0,O+=`' + 13 | __e(`+te+`) + 14 | '`),je&&(x=!0,O+=`'; 15 | `+je+`; 16 | __p += '`),ie&&(O+=`' + 17 | ((__t = (`+ie+`)) == null ? '' : __t) + 18 | '`),P=fn+j.length,j}),O+=`'; 19 | `;var G=ae.call(i,"variable")&&i.variable;if(!G)O=`with (obj) { 20 | `+O+` 21 | } 22 | `;else if(xm.test(G))throw new Z(f);O=(x?O.replace(um,""):O).replace(lm,"$1").replace(om,"$1;"),O="function("+(G||"obj")+`) { 23 | `+(G?"":`obj || (obj = {}); 24 | `)+"var __t, __p = ''"+(m?", __e = _.escape":"")+(x?`, __j = Array.prototype.join; 25 | function print() { __p += __j.call(arguments, '') } 26 | `:`; 27 | `)+O+`return __p 28 | }`;var ee=mh(function(){return le(h,W+"return "+O).apply(e,v)});if(ee.source=O,of(ee))throw ee;return ee}function GS(t){return se(t).toLowerCase()}function jS(t){return se(t).toUpperCase()}function QS(t,i,u){if(t=se(t),t&&(u||i===e))return Td(t);if(!t||!(i=ln(i)))return t;var s=An(t),a=An(i),h=Rd(s,a),v=Ld(s,a)+1;return xt(s,h,v).join("")}function YS(t,i,u){if(t=se(t),t&&(u||i===e))return t.slice(0,Ad(t)+1);if(!t||!(i=ln(i)))return t;var s=An(t),a=Ld(s,An(i))+1;return xt(s,0,a).join("")}function XS(t,i,u){if(t=se(t),t&&(u||i===e))return t.replace(ls,"");if(!t||!(i=ln(i)))return t;var s=An(t),a=Rd(s,An(i));return xt(s,a).join("")}function ZS(t,i){var u=b,s=X;if(we(i)){var a="separator"in i?i.separator:a;u="length"in i?J(i.length):u,s="omission"in i?ln(i.omission):s}t=se(t);var h=t.length;if(Er(t)){var v=An(t);h=v.length}if(u>=h)return t;var m=u-Cr(s);if(m<1)return s;var x=v?xt(v,0,m).join(""):t.slice(0,m);if(a===e)return x+s;if(v&&(m+=x.length-m),sf(a)){if(t.slice(m).search(a)){var P,A=x;for(a.global||(a=Es(a.source,se(Yc.exec(a))+"g")),a.lastIndex=0;P=a.exec(A);)var O=P.index;x=x.slice(0,O===e?m:O)}}else if(t.indexOf(ln(a),m)!=m){var M=x.lastIndexOf(a);M>-1&&(x=x.slice(0,M))}return x+s}function qS(t){return t=se(t),t&&sm.test(t)?t.replace(Gc,T1):t}var JS=Ar(function(t,i,u){return t+(u?" ":"")+i.toUpperCase()}),cf=yp("toUpperCase");function vh(t,i,u){return t=se(t),i=u?e:i,i===e?x1(t)?P1(t):d1(t):t.match(i)||[]}var mh=ne(function(t,i){try{return rn(t,e,i)}catch(u){return of(u)?u:new Z(u)}}),bS=et(function(t,i){return pn(i,function(u){u=Hn(u),Jn(t,u,uf(t[u],t))}),t});function eE(t){var i=t==null?0:t.length,u=K();return t=i?me(t,function(s){if(typeof s[1]!="function")throw new hn(o);return[u(s[0]),s[1]]}):[],ne(function(s){for(var a=-1;++adt)return[];var u=zn,s=Ue(t,zn);i=K(i),t-=zn;for(var a=ws(s,i);++u0||i<0)?new re(u):(t<0?u=u.takeRight(-t):t&&(u=u.drop(t)),i!==e&&(i=J(i),u=i<0?u.dropRight(-i):u.take(i-t)),u)},re.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},re.prototype.toArray=function(){return this.take(zn)},Bn(re.prototype,function(t,i){var u=/^(?:filter|find|map|reject)|While$/.test(i),s=/^(?:head|last)$/.test(i),a=d[s?"take"+(i=="last"?"Right":""):i],h=s||/^find/.test(i);!a||(d.prototype[i]=function(){var v=this.__wrapped__,m=s?[1]:arguments,x=v instanceof re,P=m[0],A=x||q(v),O=function(te){var ie=a.apply(d,ht([te],m));return s&&M?ie[0]:ie};A&&u&&typeof P=="function"&&P.length!=1&&(x=A=!1);var M=this.__chain__,W=!!this.__actions__.length,G=h&&!M,ee=x&&!W;if(!h&&A){v=ee?v:new re(this);var j=t.apply(v,m);return j.__actions__.push({func:Cl,args:[O],thisArg:e}),new gn(j,M)}return G&&ee?t.apply(this,m):(j=this.thru(O),G?s?j.value()[0]:j.value():j)})}),pn(["pop","push","shift","sort","splice","unshift"],function(t){var i=Zu[t],u=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",s=/^(?:pop|shift)$/.test(t);d.prototype[t]=function(){var a=arguments;if(s&&!this.__chain__){var h=this.value();return i.apply(q(h)?h:[],a)}return this[u](function(v){return i.apply(q(v)?v:[],a)})}}),Bn(re.prototype,function(t,i){var u=d[i];if(u){var s=u.name+"";ae.call(Rr,s)||(Rr[s]=[]),Rr[s].push({name:i,func:u})}}),Rr[ml(e,H).name]=[{name:"wrapper",func:e}],re.prototype.clone=q1,re.prototype.reverse=J1,re.prototype.value=b1,d.prototype.at=Lw,d.prototype.chain=Pw,d.prototype.commit=Aw,d.prototype.next=Ow,d.prototype.plant=Nw,d.prototype.reverse=Mw,d.prototype.toJSON=d.prototype.valueOf=d.prototype.value=Dw,d.prototype.first=d.prototype.head,Ci&&(d.prototype[Ci]=Iw),d},vt=A1();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(Ae._=vt,define(function(){return vt})):Yt?((Yt.exports=vt)._=vt,ds._=vt):Ae._=vt}).call(hi)});var Bc=Ct(rr()),Kv=Ct(Fv());var gi=Ct(rr());var pi=Ct(rr());var Uv=(0,pi.createContext)(void 0);function zv(e){return pi.default.createElement(Uv.Provider,{value:e.value},e.children)}function Uu(){let e=(0,pi.useContext)(Uv);if(!e)throw new Error("Missing Environment");return e}var jt=Ct(Fc());function Bv(e,n){if(e==n)return!0;if((0,jt.isArray)(e))return!(0,jt.isArray)(n)||e.length!==n.length?!1:e.every((r,l)=>n[l]===r);if((0,jt.isPlainObject)(e)){if(!(0,jt.isPlainObject)(n))return!1;let r=Object.keys(e),l=(0,jt.intersection)(r,Object.keys(n));return r.length!==l.length?!1:r.every(o=>e[o]==n[o])}return!1}var Wv=Ct(rr());function Hv(e){let n=(0,Wv.useRef)(e);return n.current=e,n}var Uc=class{constructor(n,r,l=[]){this.state=n;this.reducers=r;this.actions=[];this.dispatch=(()=>{let n=this;return new Proxy({},{get(r,l,o){return(...f)=>n.dispatchAction({fn:l,args:f})}})})();this.running=!1;this.listeners=new Set;this.effects=l.map(o=>o(this))}dispatchAction(n){console.info("dispatch:",n),this.actions.push(n),this.running||(this.running=!0,this.flush(),this.listeners.forEach(r=>r()))}flush(){if(this.actions.length===0){this.running=!1;return}let n=this.actions.shift(),r=this.state;this.state=this.reducers[n.fn](r,...n.args);for(let l of this.effects)l.update(r);this.flush()}destroy(){for(let n of this.effects)n.destroy()}addListener(n){return this.listeners.add(n),()=>{this.listeners.delete(n)}}};var Qo=Ct(Fc()),zc=[["Chet ","Coros"],["Tanvir","Raj"],["",""]],Z2={tableData:zc,lastColumnIndex:Number(zc[0].length-1),lastRowIndex:Number(zc.length-1),showAddColumnButton:!1,showAddRowButton:!1};function $v(){return Z2}var q2={getTableCellIndexOnHover(e,n,r){return e.lastColumnIndex===n&&e.lastRowIndex===r?{...e,showAddColumnButton:!0,showAddRowButton:!0}:e.lastColumnIndex!==n&&e.lastRowIndex===r?{...e,showAddColumnButton:!1,showAddRowButton:!0}:e.lastColumnIndex===n&&e.lastRowIndex!==r?{...e,showAddColumnButton:!0,showAddRowButton:!1}:e.lastColumnIndex!==n&&e.lastRowIndex!==r?{...e,showAddColumnButton:!1,showAddRowButton:!1}:e.lastColumnIndex===n?{...e,showAddColumnButton:!0}:e.lastColumnIndex!==n?{...e,showAddColumnButton:!1}:e.lastRowIndex===r?{...e,showAddRowButton:!0}:e.lastRowIndex!==r?{...e,showAddRowButton:!1}:{...e}},resetTableCellIndex(e){return{...e,showAddColumnButton:!1,showAddRowButton:!1}},addNewColumn(e){let{tableData:n}=e,r=(0,Qo.cloneDeep)(n);r.map(f=>f.push(""));let l=Number(r[0].length-1);return{...e,tableData:r,lastColumnIndex:l}},addNewRow(e){let{tableData:n}=e,r=(0,Qo.cloneDeep)(n),l=e.tableData[0].length;r.push(Array(l).fill(""));let o=Number(r.length-1);return{...e,tableData:r,lastRowIndex:o}},addNewRowAndColumn(e){let{tableData:n}=e,r=(0,Qo.cloneDeep)(n);r.map(c=>c.push(""));let l=r[0].length;r.push(Array(l).fill(""));let o=Number(r[0].length-1),f=Number(r.length-1);return{...e,tableData:r,lastRowIndex:f,lastColumnIndex:o}},updateCell(e,n,r,l){let{tableData:o}=e;return o[l][r]=n||"",{...e}}},jo=class extends Uc{constructor(n){super(n,q2)}};function Yo(e){let{app:n}=Uu(),r=(0,gi.useMemo)(()=>e(n.state),[]),[l,o]=(0,gi.useState)(r),f=Hv(l);return(0,gi.useEffect)(()=>n.addListener(()=>{let c=e(n.state);Bv(f.current,c)||o(c)}),[]),l}var ce=Ct(rr());function Vv(){let e=Uu(),{app:n}=e,r=Yo(R=>R.tableData),l=Yo(R=>R.showAddColumnButton),o=Yo(R=>R.showAddRowButton),f=l&&o,[c,p]=(0,ce.useState)(!1),[g,E]=(0,ce.useState)(!1),[N,$]=(0,ce.useState)(!1);return ce.default.createElement(ce.default.Fragment,null,ce.default.createElement("div",{style:{padding:"0px 200px"}},ce.default.createElement("div",{style:{position:"relative"}},ce.default.createElement("div",{style:{display:"flex"}},ce.default.createElement("div",{style:{position:"relative"}},ce.default.createElement("table",{style:{margin:"8px 18px 18px 8px"},onMouseLeave:()=>n.dispatch.resetTableCellIndex()},r.map((R,F)=>ce.default.createElement("tr",{key:F},R.map((B,H)=>ce.default.createElement(J2,{rowIndex:F,columnIndex:H,cellData:B}))))),ce.default.createElement("div",{onClick:()=>n.dispatch.addNewColumn(),style:{position:"absolute",display:"flex",right:"0px",top:"8px",bottom:"18px"}},ce.default.createElement("div",{onMouseEnter:()=>p(!0),onMouseLeave:()=>p(!1),style:{display:"flex",justifyContent:"center",alignItems:"center",opacity:l||c?1:0,height:"100%",width:"100%",transition:"opacity 150ms ease 50ms"}},ce.default.createElement("div",{style:{userSelect:"none",cursor:"col-resize",width:"16px",borderRadius:"3px",height:"100%",transition:"background 20ms ease-in 0s",background:c?"rgba(55, 53, 47, 0.08)":"transparent"}},ce.default.createElement("div",{style:{borderRadius:"3px",display:"flex",justifyContent:"center",alignItems:"center",height:"100%",background:"rgba(55, 53, 47, 0.06)"}},"+")))),ce.default.createElement("div",{style:{position:"absolute",display:"flex",left:"8px",bottom:"0px",right:"18px",flexDirection:"row"}},ce.default.createElement("div",{onMouseEnter:()=>E(!0),onMouseLeave:()=>E(!1),onClick:()=>n.dispatch.addNewRow(),style:{display:"flex",transition:"opacity 150ms ease 50ms",opacity:o||g?1:0,height:"100%",width:"100%"}},ce.default.createElement("div",{style:{flex:"1 1 0%",userSelect:"none",cursor:"row-resize",width:"100%",borderRadius:"3px",height:"16px",transition:"background 20ms ease-in 0s",background:g?"rgba(55, 53, 47, 0.08)":"transparent"}},ce.default.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%",width:"100%",background:"rgba(55, 53, 47, 0.06)"}},"+")))),ce.default.createElement("div",{onClick:()=>n.dispatch.addNewRowAndColumn(),style:{position:"absolute",display:"flex",bottom:"0px",right:"0px"}},ce.default.createElement("div",{onMouseOver:()=>$(!0),onMouseOut:()=>$(!1),style:{display:"flex",width:"100%",height:"100%",borderRadius:"50%",opacity:f||N?1:0}},ce.default.createElement("div",{style:{flex:"1 1 0%",userSelect:"none",cursor:"nwse-resize",width:"16px",borderRadius:"50%",height:"16px",transition:"background 20ms ease-in 0s",background:N?"rgba(55, 53, 47, 0.08)":"transparent"}},ce.default.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%",width:"100%",borderRadius:"50%",background:"rgba(55, 53, 47, 0.06)"}},"+")))))))))}function J2({cellData:e,rowIndex:n,columnIndex:r}){let l=Uu(),{app:o}=l;return ce.default.createElement("td",{onMouseOver:()=>{o.dispatch.getTableCellIndexOnHover(r,n)},style:{minHeight:"32px",minWidth:"120px",maxWidth:"240px",padding:"1px 2px",border:"1px solid rgb(233, 233, 231)",verticalAlign:"top",color:"inherit",fill:"inherit"},contentEditable:!0,onInput:f=>o.dispatch.updateCell(f.currentTarget.textContent,r,n)},ce.default.createElement("div",null,ce.default.createElement("div",{style:{maxWidth:"100%",whiteSpace:"pre-wrap",wordBreak:"break-word",caretColor:"rgb(55, 53, 47)",padding:"7px 9px",backgroundColor:"transparent",fontSize:"14px",lineHeight:"20px",minHeight:"1em",color:"rgb(55, 53, 47)"}},e)))}var Gv=$v();try{let e=JSON.parse(localStorage.getItem("state"));e&&(Gv=e)}catch(e){}var Wc=new jo(Gv);Wc.addListener(()=>{localStorage.setItem("state",JSON.stringify(Wc.state))});var Hc={app:Wc},jv=document.createElement("div");document.body.appendChild(jv);Kv.default.render(Bc.default.createElement(zv,{value:Hc},Bc.default.createElement(Vv,null)),jv);window.environment=Hc;Object.assign(window,Hc);})(); 29 | /* 30 | object-assign 31 | (c) Sindre Sorhus 32 | @license MIT 33 | */ 34 | /** 35 | * @license 36 | * Lodash 37 | * Copyright OpenJS Foundation and other contributors 38 | * Released under MIT license 39 | * Based on Underscore.js 1.8.3 40 | * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors 41 | */ 42 | /** @license React v0.20.2 43 | * scheduler.production.min.js 44 | * 45 | * Copyright (c) Facebook, Inc. and its affiliates. 46 | * 47 | * This source code is licensed under the MIT license found in the 48 | * LICENSE file in the root directory of this source tree. 49 | */ 50 | /** @license React v17.0.2 51 | * react-dom.production.min.js 52 | * 53 | * Copyright (c) Facebook, Inc. and its affiliates. 54 | * 55 | * This source code is licensed under the MIT license found in the 56 | * LICENSE file in the root directory of this source tree. 57 | */ 58 | /** @license React v17.0.2 59 | * react.production.min.js 60 | * 61 | * Copyright (c) Facebook, Inc. and its affiliates. 62 | * 63 | * This source code is licensed under the MIT license found in the 64 | * LICENSE file in the root directory of this source tree. 65 | */ 66 | --------------------------------------------------------------------------------