From da78b36fd18036d1e524051a5a3ec8208cffba61 Mon Sep 17 00:00:00 2001 From: xiamin Date: Thu, 12 Jun 2025 21:11:03 +0800 Subject: [PATCH] feat: Add demo-nextjs-antd demo and free-antd-materials package (#366) * feat: add free-antd-materials * feat: add demo-nextjs-antd * fix(free-antd-materials): pass ts tests * chore: rename free-antd-materials to form-antd-materials --- apps/demo-nextjs-antd/.eslintignore | 2 + apps/demo-nextjs-antd/.eslintrc.js | 21 + apps/demo-nextjs-antd/.gitignore | 41 + apps/demo-nextjs-antd/README.md | 36 + apps/demo-nextjs-antd/next.config.ts | 19 + apps/demo-nextjs-antd/package.json | 70 + apps/demo-nextjs-antd/pnpm-lock.yaml | 4849 +++++++++++++++++ apps/demo-nextjs-antd/postcss.config.mjs | 5 + apps/demo-nextjs-antd/public/file.svg | 1 + apps/demo-nextjs-antd/public/globe.svg | 1 + apps/demo-nextjs-antd/public/next.svg | 1 + apps/demo-nextjs-antd/public/vercel.svg | 1 + apps/demo-nextjs-antd/public/window.svg | 1 + apps/demo-nextjs-antd/src/app/favicon.ico | Bin 0 -> 25931 bytes apps/demo-nextjs-antd/src/app/globals.css | 26 + apps/demo-nextjs-antd/src/app/layout.tsx | 30 + apps/demo-nextjs-antd/src/app/page.tsx | 6 + .../src/editor/assets/icon-auto-layout.tsx | 8 + .../src/editor/assets/icon-comment.tsx | 19 + .../src/editor/assets/icon-condition.svg | 9 + .../src/editor/assets/icon-end.jpg | Bin 0 -> 21016 bytes .../src/editor/assets/icon-llm.jpg | Bin 0 -> 11089 bytes .../src/editor/assets/icon-loop.jpg | Bin 0 -> 25572 bytes .../src/editor/assets/icon-minimap.tsx | 19 + .../src/editor/assets/icon-mouse.tsx | 36 + .../src/editor/assets/icon-pad.tsx | 51 + .../src/editor/assets/icon-start.jpg | Bin 0 -> 20971 bytes .../src/editor/assets/icon-switch-line.tsx | 10 + .../src/editor/components/base-node/index.tsx | 27 + .../components/base-node/node-wrapper.scss | 20 + .../components/base-node/node-wrapper.tsx | 67 + .../editor/components/base-node/styles.tsx | 9 + .../src/editor/components/base-node/utils.ts | 18 + .../src/editor/components/editor-client.tsx | 22 + .../src/editor/components/editor.tsx | 23 + .../src/editor/components/form-render.tsx | 37 + .../src/editor/components/group/color.ts | 100 + .../group/components/background.tsx | 49 + .../components/group/components/color.tsx | 45 + .../components/group/components/header.tsx | 41 + .../group/components/icon-group.tsx | 47 + .../components/group/components/index.ts | 2 + .../group/components/node-render.tsx | 75 + .../group/components/tips/global-store.ts | 33 + .../group/components/tips/icon-close.tsx | 9 + .../group/components/tips/index.tsx | 36 + .../group/components/tips/is-mac-os.ts | 1 + .../components/group/components/tips/style.ts | 74 + .../group/components/tips/use-control.ts | 66 + .../components/group/components/title.tsx | 33 + .../components/group/components/tools.tsx | 14 + .../components/group/components/ungroup.tsx | 30 + .../src/editor/components/group/constant.ts | 7 + .../src/editor/components/group/index.css | 109 + .../src/editor/components/group/index.ts | 4 + .../src/editor/components/index.ts | 5 + .../components/line-add-button/button.tsx | 26 + .../components/line-add-button/index.scss | 8 + .../components/line-add-button/index.tsx | 126 + .../components/line-add-button/use-visible.ts | 22 + .../node-comment/components/blank-area.tsx | 43 + .../node-comment/components/border-area.tsx | 115 + .../node-comment/components/container.tsx | 45 + .../components/content-drag-area.tsx | 89 + .../node-comment/components/drag-area.tsx | 40 + .../node-comment/components/editor.tsx | 60 + .../node-comment/components/index.css | 103 + .../node-comment/components/index.ts | 3 + .../node-comment/components/more-button.tsx | 23 + .../node-comment/components/render.tsx | 78 + .../node-comment/components/resize-area.tsx | 73 + .../components/node-comment/constant.ts | 20 + .../components/node-comment/hooks/index.ts | 1 + .../node-comment/hooks/use-model.ts | 50 + .../node-comment/hooks/use-overflow.ts | 45 + .../components/node-comment/hooks/use-size.ts | 163 + .../editor/components/node-comment/index.ts | 1 + .../editor/components/node-comment/model.ts | 106 + .../editor/components/node-comment/type.ts | 24 + .../src/editor/components/node-menu/index.tsx | 125 + .../editor/components/node-panel/index.scss | 44 + .../editor/components/node-panel/index.tsx | 50 + .../components/node-panel/node-list.tsx | 90 + .../node-panel/node-placeholder.tsx | 26 + .../src/editor/components/node-render.tsx | 23 + .../components/selector-box-popover/index.tsx | 98 + .../src/editor/components/sidebar/index.tsx | 2 + .../sidebar/sidebar-node-renderer.tsx | 14 + .../components/sidebar/sidebar-provider.tsx | 12 + .../components/sidebar/sidebar-renderer.tsx | 88 + .../src/editor/components/tools.tsx | 47 + .../src/editor/context/index.ts | 2 + .../src/editor/context/node-render-context.ts | 8 + .../src/editor/context/sidebar-context.ts | 9 + .../src/editor/data/initial-data.ts | 439 ++ .../src/editor/data/node-registries.ts | 44 + .../src/editor/form-components/feedback.tsx | 35 + .../form-components/form-content/index.tsx | 26 + .../form-components/form-content/styles.tsx | 19 + .../form-components/form-header/index.scss | 10 + .../form-components/form-header/index.tsx | 49 + .../form-components/form-header/styles.tsx | 30 + .../form-header/title-input.tsx | 46 + .../form-components/form-header/utils.tsx | 10 + .../form-components/form-inputs/index.tsx | 46 + .../form-components/form-inputs/styles.tsx | 3 + .../form-components/form-item/index.css | 9 + .../form-components/form-item/index.tsx | 73 + .../form-components/form-outputs/index.tsx | 28 + .../form-components/form-outputs/styles.tsx | 9 + .../src/editor/form-components/index.ts | 9 + .../form-components/properties-edit/index.tsx | 114 + .../properties-edit/property-edit.tsx | 84 + .../properties-edit/styles.tsx | 15 + .../src/editor/form-components/type-tag.tsx | 61 + .../form-components/value-display/index.tsx | 17 + .../form-components/value-display/styles.tsx | 13 + .../src/editor/hooks/index.ts | 3 + .../src/editor/hooks/use-editor-props.tsx | 192 + .../src/editor/hooks/use-is-sidebar.ts | 7 + .../editor/hooks/use-node-render-context.ts | 7 + apps/demo-nextjs-antd/src/editor/index.ts | 3 + .../src/editor/nodes/comment/index.tsx | 22 + .../condition/condition-inputs/index.tsx | 79 + .../condition/condition-inputs/styles.tsx | 7 + .../src/editor/nodes/condition/form-meta.tsx | 26 + .../src/editor/nodes/condition/index.ts | 41 + .../src/editor/nodes/constants.ts | 8 + .../src/editor/nodes/default-form-meta.tsx | 37 + .../src/editor/nodes/end/form-meta.tsx | 65 + .../src/editor/nodes/end/index.ts | 32 + .../src/editor/nodes/index.ts | 25 + .../src/editor/nodes/llm/index.ts | 72 + .../src/editor/nodes/loop/index.ts | 77 + .../editor/nodes/loop/loop-form-render.tsx | 56 + .../src/editor/nodes/start/form-meta.tsx | 55 + .../src/editor/nodes/start/index.ts | 35 + .../context-menu-layer.tsx | 52 + .../context-menu-plugin.ts | 23 + .../plugins/context-menu-plugin/index.ts | 1 + .../src/editor/plugins/index.ts | 2 + .../plugins/sync-variable-plugin/index.ts | 1 + .../sync-variable-plugin.ts | 80 + .../src/editor/shortcuts/collapse/index.ts | 30 + .../src/editor/shortcuts/constants.ts | 17 + .../src/editor/shortcuts/copy/index.ts | 228 + .../src/editor/shortcuts/delete/index.ts | 108 + .../src/editor/shortcuts/expand/index.ts | 30 + .../src/editor/shortcuts/index.ts | 2 + .../src/editor/shortcuts/paste/index.ts | 192 + .../src/editor/shortcuts/paste/traverse.ts | 184 + .../editor/shortcuts/paste/unique-workflow.ts | 108 + .../src/editor/shortcuts/select-all/index.ts | 29 + .../src/editor/shortcuts/shortcuts.ts | 23 + .../src/editor/shortcuts/type.ts | 22 + .../src/editor/shortcuts/zoom-in/index.ts | 27 + .../src/editor/shortcuts/zoom-out/index.ts | 27 + .../src/editor/style/index.css | 1 + .../demo-nextjs-antd/src/editor/style/var.css | 4 + .../src/editor/typings/flow-value/config.json | 5 + .../src/editor/typings/flow-value/index.ts | 27 + .../src/editor/typings/index.ts | 3 + .../editor/typings/json-schema/config.json | 5 + .../src/editor/typings/json-schema/index.ts | 4 + .../src/editor/typings/node.ts | 69 + .../src/editor/utils/index.ts | 1 + .../src/editor/utils/on-drag-line-end.ts | 91 + apps/demo-nextjs-antd/tsconfig.json | 34 + common/config/rush/command-line.json | 8 + common/config/rush/pnpm-lock.yaml | 1176 +++- .../form-antd-materials/.eslintrc.cjs | 11 + .../form-antd-materials/package.json | 62 + .../batch-variable-selector/config.json | 5 + .../batch-variable-selector/index.tsx | 19 + .../src/components/condition-row/config.json | 5 + .../src/components/condition-row/constants.ts | 123 + .../components/condition-row/hooks/styles.tsx | 21 + .../components/condition-row/hooks/useOp.tsx | 52 + .../components/condition-row/hooks/useRule.ts | 30 + .../src/components/condition-row/index.tsx | 73 + .../src/components/condition-row/styles.tsx | 25 + .../src/components/condition-row/types.ts | 37 + .../src/components/constant-input/config.json | 6 + .../src/components/constant-input/index.tsx | 83 + .../src/components/constant-input/styles.tsx | 25 + .../src/components/constant-input/types.ts | 18 + .../dynamic-value-input/config.json | 5 + .../components/dynamic-value-input/index.tsx | 88 + .../components/dynamic-value-input/styles.tsx | 29 + .../src/components/index.ts | 7 + .../components/blur-input.tsx | 21 + .../components/json-schema-editor/config.json | 5 + .../json-schema-editor/default-value.tsx | 133 + .../components/json-schema-editor/hooks.tsx | 166 + .../components/json-schema-editor/index.tsx | 256 + .../components/json-schema-editor/styles.tsx | 223 + .../components/json-schema-editor/types.ts | 21 + .../components/json-schema-editor/utils.ts | 24 + .../src/components/type-selector/config.json | 5 + .../components/type-selector/constants.tsx | 372 ++ .../src/components/type-selector/index.tsx | 58 + .../components/variable-selector/config.json | 5 + .../components/variable-selector/index.tsx | 77 + .../components/variable-selector/styles.tsx | 40 + .../src/components/variable-selector/types.ts | 15 + .../variable-selector/use-variable-tree.tsx | 102 + .../src/effects/auto-rename-ref/config.json | 5 + .../src/effects/auto-rename-ref/index.ts | 104 + .../form-antd-materials/src/effects/index.ts | 3 + .../effects/provide-batch-input/config.json | 5 + .../src/effects/provide-batch-input/index.ts | 38 + .../effects/provide-batch-outputs/config.json | 5 + .../effects/provide-batch-outputs/index.ts | 34 + .../form-antd-materials/src/index.ts | 4 + .../src/typings/flow-value/config.json | 5 + .../src/typings/flow-value/index.ts | 27 + .../form-antd-materials/src/typings/index.ts | 2 + .../src/typings/json-schema/config.json | 5 + .../src/typings/json-schema/index.ts | 31 + .../src/utils/format-legacy-refs/config.json | 5 + .../src/utils/format-legacy-refs/index.ts | 153 + .../src/utils/format-legacy-refs/readme.md | 38 + .../form-antd-materials/src/utils/index.ts | 3 + .../src/utils/json-schema/config.json | 5 + .../src/utils/json-schema/index.ts | 161 + .../src/utils/svg-icon/index.tsx | 8 + .../form-antd-materials/tsconfig.json | 8 + .../form-antd-materials/vitest.config.ts | 26 + .../form-antd-materials/vitest.setup.ts | 1 + rush.json | 19 + 230 files changed, 15740 insertions(+), 21 deletions(-) create mode 100644 apps/demo-nextjs-antd/.eslintignore create mode 100644 apps/demo-nextjs-antd/.eslintrc.js create mode 100644 apps/demo-nextjs-antd/.gitignore create mode 100644 apps/demo-nextjs-antd/README.md create mode 100644 apps/demo-nextjs-antd/next.config.ts create mode 100644 apps/demo-nextjs-antd/package.json create mode 100644 apps/demo-nextjs-antd/pnpm-lock.yaml create mode 100644 apps/demo-nextjs-antd/postcss.config.mjs create mode 100644 apps/demo-nextjs-antd/public/file.svg create mode 100644 apps/demo-nextjs-antd/public/globe.svg create mode 100644 apps/demo-nextjs-antd/public/next.svg create mode 100644 apps/demo-nextjs-antd/public/vercel.svg create mode 100644 apps/demo-nextjs-antd/public/window.svg create mode 100644 apps/demo-nextjs-antd/src/app/favicon.ico create mode 100644 apps/demo-nextjs-antd/src/app/globals.css create mode 100644 apps/demo-nextjs-antd/src/app/layout.tsx create mode 100644 apps/demo-nextjs-antd/src/app/page.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/assets/icon-auto-layout.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/assets/icon-comment.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/assets/icon-condition.svg create mode 100644 apps/demo-nextjs-antd/src/editor/assets/icon-end.jpg create mode 100644 apps/demo-nextjs-antd/src/editor/assets/icon-llm.jpg create mode 100644 apps/demo-nextjs-antd/src/editor/assets/icon-loop.jpg create mode 100644 apps/demo-nextjs-antd/src/editor/assets/icon-minimap.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/assets/icon-mouse.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/assets/icon-pad.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/assets/icon-start.jpg create mode 100644 apps/demo-nextjs-antd/src/editor/assets/icon-switch-line.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/base-node/index.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/base-node/node-wrapper.scss create mode 100644 apps/demo-nextjs-antd/src/editor/components/base-node/node-wrapper.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/base-node/styles.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/base-node/utils.ts create mode 100644 apps/demo-nextjs-antd/src/editor/components/editor-client.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/editor.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/form-render.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/group/color.ts create mode 100644 apps/demo-nextjs-antd/src/editor/components/group/components/background.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/group/components/color.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/group/components/header.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/group/components/icon-group.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/group/components/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/components/group/components/node-render.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/group/components/tips/global-store.ts create mode 100644 apps/demo-nextjs-antd/src/editor/components/group/components/tips/icon-close.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/group/components/tips/index.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/group/components/tips/is-mac-os.ts create mode 100644 apps/demo-nextjs-antd/src/editor/components/group/components/tips/style.ts create mode 100644 apps/demo-nextjs-antd/src/editor/components/group/components/tips/use-control.ts create mode 100644 apps/demo-nextjs-antd/src/editor/components/group/components/title.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/group/components/tools.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/group/components/ungroup.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/group/constant.ts create mode 100644 apps/demo-nextjs-antd/src/editor/components/group/index.css create mode 100644 apps/demo-nextjs-antd/src/editor/components/group/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/components/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/components/line-add-button/button.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/line-add-button/index.scss create mode 100644 apps/demo-nextjs-antd/src/editor/components/line-add-button/index.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/line-add-button/use-visible.ts create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-comment/components/blank-area.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-comment/components/border-area.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-comment/components/container.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-comment/components/content-drag-area.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-comment/components/drag-area.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-comment/components/editor.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-comment/components/index.css create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-comment/components/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-comment/components/more-button.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-comment/components/render.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-comment/components/resize-area.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-comment/constant.ts create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-comment/hooks/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-comment/hooks/use-model.ts create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-comment/hooks/use-overflow.ts create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-comment/hooks/use-size.ts create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-comment/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-comment/model.ts create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-comment/type.ts create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-menu/index.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-panel/index.scss create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-panel/index.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-panel/node-list.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-panel/node-placeholder.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/node-render.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/selector-box-popover/index.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/sidebar/index.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/sidebar/sidebar-node-renderer.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/sidebar/sidebar-provider.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/sidebar/sidebar-renderer.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/components/tools.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/context/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/context/node-render-context.ts create mode 100644 apps/demo-nextjs-antd/src/editor/context/sidebar-context.ts create mode 100644 apps/demo-nextjs-antd/src/editor/data/initial-data.ts create mode 100644 apps/demo-nextjs-antd/src/editor/data/node-registries.ts create mode 100644 apps/demo-nextjs-antd/src/editor/form-components/feedback.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/form-components/form-content/index.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/form-components/form-content/styles.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/form-components/form-header/index.scss create mode 100644 apps/demo-nextjs-antd/src/editor/form-components/form-header/index.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/form-components/form-header/styles.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/form-components/form-header/title-input.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/form-components/form-header/utils.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/form-components/form-inputs/index.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/form-components/form-inputs/styles.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/form-components/form-item/index.css create mode 100644 apps/demo-nextjs-antd/src/editor/form-components/form-item/index.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/form-components/form-outputs/index.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/form-components/form-outputs/styles.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/form-components/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/form-components/properties-edit/index.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/form-components/properties-edit/property-edit.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/form-components/properties-edit/styles.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/form-components/type-tag.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/form-components/value-display/index.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/form-components/value-display/styles.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/hooks/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/hooks/use-editor-props.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/hooks/use-is-sidebar.ts create mode 100644 apps/demo-nextjs-antd/src/editor/hooks/use-node-render-context.ts create mode 100644 apps/demo-nextjs-antd/src/editor/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/nodes/comment/index.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/nodes/condition/condition-inputs/index.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/nodes/condition/condition-inputs/styles.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/nodes/condition/form-meta.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/nodes/condition/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/nodes/constants.ts create mode 100644 apps/demo-nextjs-antd/src/editor/nodes/default-form-meta.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/nodes/end/form-meta.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/nodes/end/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/nodes/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/nodes/llm/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/nodes/loop/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/nodes/loop/loop-form-render.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/nodes/start/form-meta.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/nodes/start/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/plugins/context-menu-plugin/context-menu-layer.tsx create mode 100644 apps/demo-nextjs-antd/src/editor/plugins/context-menu-plugin/context-menu-plugin.ts create mode 100644 apps/demo-nextjs-antd/src/editor/plugins/context-menu-plugin/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/plugins/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/plugins/sync-variable-plugin/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/plugins/sync-variable-plugin/sync-variable-plugin.ts create mode 100644 apps/demo-nextjs-antd/src/editor/shortcuts/collapse/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/shortcuts/constants.ts create mode 100644 apps/demo-nextjs-antd/src/editor/shortcuts/copy/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/shortcuts/delete/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/shortcuts/expand/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/shortcuts/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/shortcuts/paste/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/shortcuts/paste/traverse.ts create mode 100644 apps/demo-nextjs-antd/src/editor/shortcuts/paste/unique-workflow.ts create mode 100644 apps/demo-nextjs-antd/src/editor/shortcuts/select-all/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/shortcuts/shortcuts.ts create mode 100644 apps/demo-nextjs-antd/src/editor/shortcuts/type.ts create mode 100644 apps/demo-nextjs-antd/src/editor/shortcuts/zoom-in/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/shortcuts/zoom-out/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/style/index.css create mode 100644 apps/demo-nextjs-antd/src/editor/style/var.css create mode 100644 apps/demo-nextjs-antd/src/editor/typings/flow-value/config.json create mode 100644 apps/demo-nextjs-antd/src/editor/typings/flow-value/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/typings/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/typings/json-schema/config.json create mode 100644 apps/demo-nextjs-antd/src/editor/typings/json-schema/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/typings/node.ts create mode 100644 apps/demo-nextjs-antd/src/editor/utils/index.ts create mode 100644 apps/demo-nextjs-antd/src/editor/utils/on-drag-line-end.ts create mode 100644 apps/demo-nextjs-antd/tsconfig.json create mode 100644 packages/materials/form-antd-materials/.eslintrc.cjs create mode 100644 packages/materials/form-antd-materials/package.json create mode 100644 packages/materials/form-antd-materials/src/components/batch-variable-selector/config.json create mode 100644 packages/materials/form-antd-materials/src/components/batch-variable-selector/index.tsx create mode 100644 packages/materials/form-antd-materials/src/components/condition-row/config.json create mode 100644 packages/materials/form-antd-materials/src/components/condition-row/constants.ts create mode 100644 packages/materials/form-antd-materials/src/components/condition-row/hooks/styles.tsx create mode 100644 packages/materials/form-antd-materials/src/components/condition-row/hooks/useOp.tsx create mode 100644 packages/materials/form-antd-materials/src/components/condition-row/hooks/useRule.ts create mode 100644 packages/materials/form-antd-materials/src/components/condition-row/index.tsx create mode 100644 packages/materials/form-antd-materials/src/components/condition-row/styles.tsx create mode 100644 packages/materials/form-antd-materials/src/components/condition-row/types.ts create mode 100644 packages/materials/form-antd-materials/src/components/constant-input/config.json create mode 100644 packages/materials/form-antd-materials/src/components/constant-input/index.tsx create mode 100644 packages/materials/form-antd-materials/src/components/constant-input/styles.tsx create mode 100644 packages/materials/form-antd-materials/src/components/constant-input/types.ts create mode 100644 packages/materials/form-antd-materials/src/components/dynamic-value-input/config.json create mode 100644 packages/materials/form-antd-materials/src/components/dynamic-value-input/index.tsx create mode 100644 packages/materials/form-antd-materials/src/components/dynamic-value-input/styles.tsx create mode 100644 packages/materials/form-antd-materials/src/components/index.ts create mode 100644 packages/materials/form-antd-materials/src/components/json-schema-editor/components/blur-input.tsx create mode 100644 packages/materials/form-antd-materials/src/components/json-schema-editor/config.json create mode 100644 packages/materials/form-antd-materials/src/components/json-schema-editor/default-value.tsx create mode 100644 packages/materials/form-antd-materials/src/components/json-schema-editor/hooks.tsx create mode 100644 packages/materials/form-antd-materials/src/components/json-schema-editor/index.tsx create mode 100644 packages/materials/form-antd-materials/src/components/json-schema-editor/styles.tsx create mode 100644 packages/materials/form-antd-materials/src/components/json-schema-editor/types.ts create mode 100644 packages/materials/form-antd-materials/src/components/json-schema-editor/utils.ts create mode 100644 packages/materials/form-antd-materials/src/components/type-selector/config.json create mode 100644 packages/materials/form-antd-materials/src/components/type-selector/constants.tsx create mode 100644 packages/materials/form-antd-materials/src/components/type-selector/index.tsx create mode 100644 packages/materials/form-antd-materials/src/components/variable-selector/config.json create mode 100644 packages/materials/form-antd-materials/src/components/variable-selector/index.tsx create mode 100644 packages/materials/form-antd-materials/src/components/variable-selector/styles.tsx create mode 100644 packages/materials/form-antd-materials/src/components/variable-selector/types.ts create mode 100644 packages/materials/form-antd-materials/src/components/variable-selector/use-variable-tree.tsx create mode 100644 packages/materials/form-antd-materials/src/effects/auto-rename-ref/config.json create mode 100644 packages/materials/form-antd-materials/src/effects/auto-rename-ref/index.ts create mode 100644 packages/materials/form-antd-materials/src/effects/index.ts create mode 100644 packages/materials/form-antd-materials/src/effects/provide-batch-input/config.json create mode 100644 packages/materials/form-antd-materials/src/effects/provide-batch-input/index.ts create mode 100644 packages/materials/form-antd-materials/src/effects/provide-batch-outputs/config.json create mode 100644 packages/materials/form-antd-materials/src/effects/provide-batch-outputs/index.ts create mode 100644 packages/materials/form-antd-materials/src/index.ts create mode 100644 packages/materials/form-antd-materials/src/typings/flow-value/config.json create mode 100644 packages/materials/form-antd-materials/src/typings/flow-value/index.ts create mode 100644 packages/materials/form-antd-materials/src/typings/index.ts create mode 100644 packages/materials/form-antd-materials/src/typings/json-schema/config.json create mode 100644 packages/materials/form-antd-materials/src/typings/json-schema/index.ts create mode 100644 packages/materials/form-antd-materials/src/utils/format-legacy-refs/config.json create mode 100644 packages/materials/form-antd-materials/src/utils/format-legacy-refs/index.ts create mode 100644 packages/materials/form-antd-materials/src/utils/format-legacy-refs/readme.md create mode 100644 packages/materials/form-antd-materials/src/utils/index.ts create mode 100644 packages/materials/form-antd-materials/src/utils/json-schema/config.json create mode 100644 packages/materials/form-antd-materials/src/utils/json-schema/index.ts create mode 100644 packages/materials/form-antd-materials/src/utils/svg-icon/index.tsx create mode 100644 packages/materials/form-antd-materials/tsconfig.json create mode 100644 packages/materials/form-antd-materials/vitest.config.ts create mode 100644 packages/materials/form-antd-materials/vitest.setup.ts diff --git a/apps/demo-nextjs-antd/.eslintignore b/apps/demo-nextjs-antd/.eslintignore new file mode 100644 index 00000000..5d52327c --- /dev/null +++ b/apps/demo-nextjs-antd/.eslintignore @@ -0,0 +1,2 @@ +.eslintrc.js +src/editor/plugins/context-menu-plugin/context-menu-layer.tsx diff --git a/apps/demo-nextjs-antd/.eslintrc.js b/apps/demo-nextjs-antd/.eslintrc.js new file mode 100644 index 00000000..08d7f75b --- /dev/null +++ b/apps/demo-nextjs-antd/.eslintrc.js @@ -0,0 +1,21 @@ +const { defineConfig } = require('@flowgram.ai/eslint-config'); + +module.exports = defineConfig({ + parser: '@babel/eslint-parser', + preset: 'web', + packageRoot: __dirname, + parserOptions: { + requireConfigFile: false, + }, + rules: { + 'no-console': 'off', + 'react/prop-types': 'off', + }, + plugins: ['json'], + extends: ['next', 'next/core-web-vitals'], + settings: { + react: { + version: 'detect', + }, + }, +}); diff --git a/apps/demo-nextjs-antd/.gitignore b/apps/demo-nextjs-antd/.gitignore new file mode 100644 index 00000000..5ef6a520 --- /dev/null +++ b/apps/demo-nextjs-antd/.gitignore @@ -0,0 +1,41 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/apps/demo-nextjs-antd/README.md b/apps/demo-nextjs-antd/README.md new file mode 100644 index 00000000..e215bc4c --- /dev/null +++ b/apps/demo-nextjs-antd/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/apps/demo-nextjs-antd/next.config.ts b/apps/demo-nextjs-antd/next.config.ts new file mode 100644 index 00000000..fc85415f --- /dev/null +++ b/apps/demo-nextjs-antd/next.config.ts @@ -0,0 +1,19 @@ +import path from 'path'; + +import type { NextConfig } from 'next'; + +const __dirname = new URL('.', import.meta.url).pathname; + +const nextConfig: NextConfig = { + reactStrictMode: false, + webpack: (config) => { + config.resolve.alias = { + ...config.resolve.alias, + '@app': path.resolve(__dirname, 'src/app'), + '@editor': path.resolve(__dirname, 'src/editor'), + }; + return config; + }, +}; + +export default nextConfig; diff --git a/apps/demo-nextjs-antd/package.json b/apps/demo-nextjs-antd/package.json new file mode 100644 index 00000000..b55d3c6c --- /dev/null +++ b/apps/demo-nextjs-antd/package.json @@ -0,0 +1,70 @@ +{ + "name": "@flowgram.ai/demo-nextjs-antd", + "version": "0.1.0", + "description": "", + "keywords": [], + "license": "MIT", + "files": [ + "public/", + "src/", + ".eslintrc.js", + ".gitignore", + "next.config.ts", + "pnpm-lock.yaml", + "postcss.config.mjs", + "package.json", + "tsconfig.json", + "README.md" + ], + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "eslint ./src --cache", + "lint:fix": "eslint ./src --fix" + }, + "dependencies": { + "antd": "^5.25.4", + "react": "^18", + "react-dom": "^18", + "next": "15.2.4", + "lodash-es": "^4.17.21", + "classnames": "^2.5.1", + "server-only": "^0.0.1", + "styled-components": "^5", + "nanoid": "^4.0.2", + "@ant-design/icons": "5.x", + "@flowgram.ai/free-layout-editor": "workspace:*", + "@flowgram.ai/free-snap-plugin": "workspace:*", + "@flowgram.ai/free-lines-plugin": "workspace:*", + "@flowgram.ai/free-node-panel-plugin": "workspace:*", + "@flowgram.ai/minimap-plugin": "workspace:*", + "@flowgram.ai/free-container-plugin": "workspace:*", + "@flowgram.ai/free-group-plugin": "workspace:*", + "@flowgram.ai/form-antd-materials": "workspace:*" + }, + "devDependencies": { + "@flowgram.ai/ts-config": "workspace:*", + "@flowgram.ai/eslint-config": "workspace:*", + "@types/styled-components": "^5", + "typescript": "^5.0.4", + "@types/lodash-es": "^4.17.12", + "@types/node": "^18", + "@types/next": "^9.0.0", + "@types/react": "^18", + "@types/react-dom": "^18", + "@tailwindcss/postcss": "^4", + "tailwindcss": "^4", + "eslint": "^8.54.0", + "@babel/eslint-parser": "~7.19.1", + "eslint-plugin-json": "^4.0.1", + "eslint-plugin-next": "0.0.0", + "eslint-config-next": "^15.3.1", + "@eslint/eslintrc": "^3", + "sass": "^1.89.1" + }, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + } +} diff --git a/apps/demo-nextjs-antd/pnpm-lock.yaml b/apps/demo-nextjs-antd/pnpm-lock.yaml new file mode 100644 index 00000000..726fe38f --- /dev/null +++ b/apps/demo-nextjs-antd/pnpm-lock.yaml @@ -0,0 +1,4849 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@flowgram.ai/free-container-plugin': + specifier: 0.1.17 + version: 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)) + '@flowgram.ai/free-layout-editor': + specifier: 0.1.17 + version: 0.1.17(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)) + '@flowgram.ai/free-lines-plugin': + specifier: 0.1.17 + version: 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)) + '@flowgram.ai/free-node-panel-plugin': + specifier: 0.1.17 + version: 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)) + '@flowgram.ai/free-snap-plugin': + specifier: 0.1.17 + version: 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)) + '@flowgram.ai/minimap-plugin': + specifier: 0.1.17 + version: 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)) + next: + specifier: 15.2.4 + version: 15.2.4(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: + specifier: ^19.0.0 + version: 19.1.0 + react-dom: + specifier: ^19.0.0 + version: 19.1.0(react@19.1.0) + devDependencies: + '@eslint/eslintrc': + specifier: ^3 + version: 3.3.1 + '@tailwindcss/postcss': + specifier: ^4 + version: 4.1.0 + '@types/node': + specifier: ^20 + version: 20.17.30 + '@types/react': + specifier: ^19 + version: 19.1.0 + '@types/react-dom': + specifier: ^19 + version: 19.1.1(@types/react@19.1.0) + eslint: + specifier: ^9 + version: 9.23.0(jiti@2.4.2) + eslint-config-next: + specifier: 15.2.4 + version: 15.2.4(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) + tailwindcss: + specifier: ^4 + version: 4.1.0 + typescript: + specifier: ^5 + version: 5.8.2 + +packages: + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.8': + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.10': + resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.27.0': + resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.25.9': + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.27.0': + resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.27.0': + resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.27.0': + resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.27.0': + resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.27.0': + resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.27.0': + resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} + engines: {node: '>=6.9.0'} + + '@dagrejs/graphlib@2.2.2': + resolution: {integrity: sha512-CbyGpCDKsiTg/wuk79S7Muoj8mghDGAESWGxcSyhHX5jD35vYMBZochYVFzlHxynpE9unpu6O+4ZuhrLxASsOg==} + engines: {node: '>17.0.0'} + + '@emnapi/core@1.4.0': + resolution: {integrity: sha512-H+N/FqT07NmLmt6OFFtDfwe8PNygprzBikrEMyQfgqSmT0vzE515Pz7R8izwB9q/zsH/MA64AKoul3sA6/CzVg==} + + '@emnapi/runtime@1.4.0': + resolution: {integrity: sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==} + + '@emnapi/wasi-threads@1.0.1': + resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} + + '@emotion/is-prop-valid@1.3.1': + resolution: {integrity: sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==} + + '@emotion/memoize@0.9.0': + resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} + + '@emotion/stylis@0.8.5': + resolution: {integrity: sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==} + + '@emotion/unitless@0.7.5': + resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} + + '@eslint-community/eslint-utils@4.5.1': + resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.19.2': + resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.2.1': + resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.12.0': + resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.13.0': + resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.23.0': + resolution: {integrity: sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.8': + resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@flowgram.ai/background-plugin@0.1.17': + resolution: {integrity: sha512-h+atlG+ZETPc9Ocfo5/Asq5uL/O7g8CP7a3yY/Fs0lvvunDl5ZPY/V/pA/mi7ErFlZEebY/d9pemKUCjP3GgNQ==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + + '@flowgram.ai/command@0.1.17': + resolution: {integrity: sha512-39q6lEJQsOYs4zcJUkya1MIDB0NJFM+FFhRyN8IHqNJ7cwjRs7zlheiT9HIIsCrQtI8p8xfz3gbmaKgs4VUQPg==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + + '@flowgram.ai/core@0.1.17': + resolution: {integrity: sha512-HnCEaDN+jZzuIbWa4VUXJ9qLeSWo8RgWNcuWlQstFNYKR2dGLvB+5uMZJQPr5cIwWtW6YNgY2wI0yt72UsZ6kQ==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + + '@flowgram.ai/document@0.1.17': + resolution: {integrity: sha512-poFpnmCJgIEajrbKSCpVDG1RpyPc7yCxLvgiPMkKKmrCx737FYE3/yMchCGcOVWyExurIxcxcdsZucDDy66qTg==} + + '@flowgram.ai/editor@0.1.17': + resolution: {integrity: sha512-7urN2f7+FKmjZxQ/gU26yC18/HYKhgZPQwrql3cKaa4XqAne0W6jzgXpSq0h1+4O9/lLVF+2q981UOaCU3QBkw==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + + '@flowgram.ai/form-core@0.1.17': + resolution: {integrity: sha512-deCVo3Y2ltw8ebQ6ht8xQnQ+fECo1eGhLlluPlHDRR1/sHt7LQC2cBBCY3jJS8D+rgNAHMA7+S0/gFBRRy+BZw==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + + '@flowgram.ai/form@0.1.17': + resolution: {integrity: sha512-B5stRohfWcFdUq1gUPt5c4FZoWGrDpPOZoDEbuH8W/3Rk5k3T6UvUQyJ9Kt39PPe4kAu4g8JNetSq+9NW7MPCA==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + + '@flowgram.ai/free-auto-layout-plugin@0.1.17': + resolution: {integrity: sha512-DRqFwWVJMAzKALA1d5eowmvDTIIgr8kUYw0mH36hKHGlAqG4s4NA+Gr/cq+35zAQOjHAgTQ/u/ztHjtXaZPBIg==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + styled-components: '>=4' + + '@flowgram.ai/free-container-plugin@0.1.17': + resolution: {integrity: sha512-ftIP2xaC/Dub3BzWCR4h52gK+c6/HROwYjWrFo+0bcTZ9F0aKIiILVS4GDfyq716TK0A4AB15IGfsb2h+tpNzg==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + styled-components: '>=4' + + '@flowgram.ai/free-history-plugin@0.1.17': + resolution: {integrity: sha512-y6cEeRjuJ0rCGEJqLmqpZqMyAFmk/KjdOxNA6ZjwL2YlmCrQoutNY/P1oUrbbxrDfgdle6N3gmnqXmTFJUWfag==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + + '@flowgram.ai/free-hover-plugin@0.1.17': + resolution: {integrity: sha512-8DcrReZU+PbVpOZL3wZQ6x7RWDEOpUy+X0kchi0s2PYxJccMfrMML8l1mhhD0o5YZP1wqjKO66FQAUYYtgxxgg==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + + '@flowgram.ai/free-layout-core@0.1.17': + resolution: {integrity: sha512-xgTkAiTSBZId0y24QTNFYj53iv6zPd7JfLgkCOdccfUV5TqphPAh67Sb0Z+zwXiWUOWnK7DdUfo12n5aIBN+aQ==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + + '@flowgram.ai/free-layout-editor@0.1.17': + resolution: {integrity: sha512-kRe3aILfg1Yp4pCKegC0J/OBKbAycIWyd6719wxtQRSL3u1te1fVWbynY3oq1RMy7Tk05lWwGyNXJtx4zQqg7g==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + + '@flowgram.ai/free-lines-plugin@0.1.17': + resolution: {integrity: sha512-/IQscRPI7sxhy1FZTXKx3m8b9uTRED9GNJ6R0waCtaEnCf+E+f4ajHdRHNapd15tEKS4zzbEBR6ZcUKHlcbW1A==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + styled-components: '>=4' + + '@flowgram.ai/free-node-panel-plugin@0.1.17': + resolution: {integrity: sha512-s+6HjINJZO3TOmZ+mnqaN3BU+Wt3DzJUrALOXzas24JSynM1GmkHduYALwhMsWqlrfLz/3IondfnnNdFLMK5fQ==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + styled-components: '>=4' + + '@flowgram.ai/free-snap-plugin@0.1.17': + resolution: {integrity: sha512-V/s3Lr+WWyJQFth1RWJc628faGaXuoRBWAChl7SVTz7ANBD2HU1ZWqhDcyUgE+bdhfE05kosEAHJjnyHa9mdtQ==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + styled-components: '>=4' + + '@flowgram.ai/free-stack-plugin@0.1.17': + resolution: {integrity: sha512-zn+J2G2pbPT7/2V3bQyTEkhoUcE9BQw/zppqZJPhB8YKr58zbZ1mDgiCMBgZs97USK000ZZR64VD99YjYA0IzA==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + styled-components: '>=4' + + '@flowgram.ai/group-plugin@0.1.17': + resolution: {integrity: sha512-cLldQhMj5C4IqQSGjRMMxnjhuOvoccEBjD7Vm24iW0NYB/UHPYiirBnAcrsHopwGHGU56zmJh+ZDfOw8X3rvHQ==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + + '@flowgram.ai/history-node-plugin@0.1.17': + resolution: {integrity: sha512-nwVpaFdS+oOE3KB3nRSFs1ja0ye9owqhltB6kVYUqg/ewYiv9SahIuzw1pR2paysb/wnJa7jlZBWz5wH8aSgvA==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + styled-components: '>=4' + + '@flowgram.ai/history@0.1.17': + resolution: {integrity: sha512-+TQGhfKOzMgmHFIE7wMeFVKrUUFu0mJVtCJBIS2r4awh5ZdwX/ramw6AYKXeixtlp+y6mf+TFkp42OUR00x2/Q==} + + '@flowgram.ai/i18n-plugin@0.1.17': + resolution: {integrity: sha512-zF7BvTjdOAaxQW8w9lQ8SzXYpK11vBkbKZh7SBPFcCLw0l9+KHN+xjzXwqjjrNtaMPGxKqitRKK0oeEpGSTVUQ==} + + '@flowgram.ai/i18n@0.1.17': + resolution: {integrity: sha512-9oUI9wCb/hSZ2UFKoPwFgoCU+nkNiqkTKeB+GelDuY6X68RtxRly9nM4nSBKCK0KT0qQddMq3E23+qmq/uG/Uw==} + + '@flowgram.ai/materials-plugin@0.1.17': + resolution: {integrity: sha512-4bLL20V5FRnV+RTwUbqh0cRGcWx5mvtm3++bSH9T1dW0kh3lb5FvshUVUBweJ2WRKKYDN43Y6uAbqtXiHqh1ng==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + styled-components: '>=4' + + '@flowgram.ai/minimap-plugin@0.1.17': + resolution: {integrity: sha512-qYYpxOpQDPtcuvr+qBv+Q35hBMGjGUZxoldVrtIrQAjHjOV4f/PU35dZQ0QjLZCOKTv2C+H3CRPG/7q5cQQcoA==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + styled-components: '>=4' + + '@flowgram.ai/node-core-plugin@0.1.17': + resolution: {integrity: sha512-Arnt+GuG3UcgSH1gXbiuTgHuiWzYYTW22T3MeS9RmMgnLgALSfcdY+0kvKD2YiuPIS1C1CTeVBkV9HjkPigzsA==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + styled-components: '>=4' + + '@flowgram.ai/node-variable-plugin@0.1.17': + resolution: {integrity: sha512-91XvQK2bLutajZnGeeh0ahbVpe2Y2Sdif02z3N/IejHHKNdjEx74VuOy+v3MXX0IZSu6c4q8YVcbW+L1ULOs4g==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + styled-components: '>=4' + + '@flowgram.ai/node@0.1.17': + resolution: {integrity: sha512-Ko2sT93peiMbwpBeDU1SO8JLci+cLyuERKD33kcmdBVeGCJI+qa+qIWLhzxHFeKUBQ+Hloqapic70HWeD55STw==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + + '@flowgram.ai/playground-react@0.1.17': + resolution: {integrity: sha512-Tf4PrAIEP65NAmPkdNE0KxmtlHwE+6S2YU0iB3W8JEGNR1P1B4+OfIbaJswIP8y5kkGhw2oGd05LUcU3ZHC14g==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + + '@flowgram.ai/reactive@0.1.17': + resolution: {integrity: sha512-tjr9f3y9QfV2pcVNAOCzqXT2yRXl6jp7ejwe3AWkseTpG7lnd5hcZQ+OlDnzlY/P7yQtxs9QGVkmHbpHnv9xBw==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + + '@flowgram.ai/redux-devtool-plugin@0.1.17': + resolution: {integrity: sha512-Yk7IZb7bE6kJTWN4inhBt6fH2TuwRQ3Lq3ae22+MAUyTZcPS1ULQlZecupsZxi5Su7iho5CZ8uG06gDCE7SSfw==} + + '@flowgram.ai/renderer@0.1.17': + resolution: {integrity: sha512-kfQdFVBoay1Gir71JYkzCHxNyZ0e1vj3gFFjMl2TV1JSw/4oQdAahR8CzDpZ3ksBLVu42I6L9SAAiytGW75ZPw==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + + '@flowgram.ai/select-box-plugin@0.1.17': + resolution: {integrity: sha512-VtRKsFk8vpNpnynBoG9w/P2YwYWzez42cd23Aq3x6pcMafSIZ8gT6CT/Jkdsr4pnki+cawJOkHuHJn/aHpumJQ==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + + '@flowgram.ai/shortcuts-plugin@0.1.17': + resolution: {integrity: sha512-ysj/JKG76f/2YiXcVqEi72PcE9oqMGtLpa5NNJ8OaPHW2GSIX06CoprvxIMOACo3oXKIyD7J3WzrXo8jG5IyvQ==} + + '@flowgram.ai/utils@0.1.17': + resolution: {integrity: sha512-639r+a3MYJ6GFBL3dVmQxFObphy5FWkoyG1hV3K9K+2Tlw9q/q4JJuNHp46/wgRzmUEPXIYXysZfbbJV7Knixg==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + + '@flowgram.ai/variable-core@0.1.17': + resolution: {integrity: sha512-AQwjZVKapV7oAlQ0/Y8q6wcCVHci3tW1dZ0/nVhVqtQeesjGdG9Q1v3vuRM5ofOCjlMbiKJDJ9f0qRXkcmxREw==} + peerDependencies: + react: '>=17' + react-dom: '>=17' + + '@flowgram.ai/variable-layout@0.1.17': + resolution: {integrity: sha512-Zi+Zeaf8VC3hcU7UQV9goE6cX0T2wafidpagv23fL2BI0kSLuTh1tNJyAcR5PumI+pfTPgcrED8Qk0VDadUGlQ==} + + '@flowgram.ai/variable-plugin@0.1.17': + resolution: {integrity: sha512-53nH41d1Zrg8vzh67e0BGOh/QWvhqD8o2077E/q6oFZYomaboweG09615w+KqUmuOoVWTxhcdU4c58n8DcKtLg==} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.2': + resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} + engines: {node: '>=18.18'} + + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-s390x@1.0.4': + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-s390x@0.33.5': + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-linuxmusl-arm64@0.33.5': + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-linuxmusl-x64@0.33.5': + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-wasm32@0.33.5': + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-ia32@0.33.5': + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@inversifyjs/common@1.4.0': + resolution: {integrity: sha512-qfRJ/3iOlCL/VfJq8+4o5X4oA14cZSBbpAmHsYj8EsIit1xDndoOl0xKOyglKtQD4u4gdNVxMHx4RWARk/I4QA==} + + '@inversifyjs/core@1.3.5': + resolution: {integrity: sha512-B4MFXabhNTAmrfgB+yeD6wd/GIvmvWC6IQ8Rh/j2C3Ix69kmqwz9pr8Jt3E+Nho9aEHOQCZaGmrALgtqRd+oEQ==} + + '@inversifyjs/reflect-metadata-utils@0.2.4': + resolution: {integrity: sha512-u95rV3lKfG+NT2Uy/5vNzoDujos8vN8O18SSA5UyhxsGYd4GLQn/eUsGXfOsfa7m34eKrDelTKRUX1m/BcNX5w==} + peerDependencies: + reflect-metadata: 0.2.2 + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@napi-rs/wasm-runtime@0.2.8': + resolution: {integrity: sha512-OBlgKdX7gin7OIq4fadsjpg+cp2ZphvAIKucHsNfTdJiqdOmOEwQd/bHi0VwNrcw5xpBJyUw6cK/QilCqy1BSg==} + + '@next/env@15.2.4': + resolution: {integrity: sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g==} + + '@next/eslint-plugin-next@15.2.4': + resolution: {integrity: sha512-O8ScvKtnxkp8kL9TpJTTKnMqlkZnS+QxwoQnJwPGBxjBbzd6OVVPEJ5/pMNrktSyXQD/chEfzfFzYLM6JANOOQ==} + + '@next/swc-darwin-arm64@15.2.4': + resolution: {integrity: sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@15.2.4': + resolution: {integrity: sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@15.2.4': + resolution: {integrity: sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@next/swc-linux-arm64-musl@15.2.4': + resolution: {integrity: sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@next/swc-linux-x64-gnu@15.2.4': + resolution: {integrity: sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@next/swc-linux-x64-musl@15.2.4': + resolution: {integrity: sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@next/swc-win32-arm64-msvc@15.2.4': + resolution: {integrity: sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-x64-msvc@15.2.4': + resolution: {integrity: sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@nolyfill/is-core-module@1.0.39': + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} + + '@phosphor/algorithm@1.2.0': + resolution: {integrity: sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==} + + '@phosphor/collections@1.2.0': + resolution: {integrity: sha512-T9/0EjSuY6+ga2LIFRZ0xupciOR3Qnyy8Q95lhGTC0FXZUFwC8fl9e8On6IcwasCszS+1n8dtZUWSIynfgdpzw==} + + '@phosphor/messaging@1.3.0': + resolution: {integrity: sha512-k0JE+BTMKlkM335S2AmmJxoYYNRwOdW5jKBqLgjJdGRvUQkM0+2i60ahM45+J23atGJDv9esKUUBINiKHFhLew==} + + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@rushstack/eslint-patch@1.11.0': + resolution: {integrity: sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==} + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@tailwindcss/node@4.1.0': + resolution: {integrity: sha512-mfgxGxFaxbsUbaGwKIAQXUSm7Qoojw53FftpoKwo4ANwr9wnDaByz4vi1gMti/xfJvmQ5lzA1DvPiX5yCHtBkQ==} + + '@tailwindcss/oxide-android-arm64@4.1.0': + resolution: {integrity: sha512-UredFljuHey2Kh5qyYfQVBr0Xfq70ZE5Df6i5IubNYQGs2JXXT4VL0SIUjwzHx5W9T6t7dT7banunlV6lthGPQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.1.0': + resolution: {integrity: sha512-QHQ/46lRVwH9zEBNiRk8AJ3Af4pMq6DuZAI//q323qrPOXjsRdrhLsH9LUO3mqBfHr5EZNUxN3Am5vpO89sntw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.1.0': + resolution: {integrity: sha512-lEMgYHCvQQ6x2KOZ4FwnPprwfnc+UnjzwXRqEYIhB/NlYvXQD1QMf7oKEDRqy94DiZaYox9ZRfG2YJOBgM0UkA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.1.0': + resolution: {integrity: sha512-9fdImTc+2lA5yHqJ61oeTXfCtzylNOzJVFhyWwVQAJESJJbVCPnj6f+b+Zf/AYAdKQfS6FCThbPEahkQrDCgLQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.0': + resolution: {integrity: sha512-HB0bTkUOuTLLSdadyRhKE9yps4/ZBjrojbHTPMSvvf/8yBLZRPpWb+A6IgW5R+2A2AL4KhVPgLwWfoXsErxJFg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.0': + resolution: {integrity: sha512-+QtYCwvKLjC46h6RikKkpELJWrpiMMtgyK0aaqhwPLEx1icGgIhwz8dqrkAiqbFRE0KiRrE2aenhYoEkplyRmA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-arm64-musl@4.1.0': + resolution: {integrity: sha512-nApadFKM9GauzuPZPlt6TKfELavMHqJ0gVd+GYkYBTwr2t9KhgCAb2sKiFDDIhs1a7gOjsU7P1lEauv3iKFp+Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-linux-x64-gnu@4.1.0': + resolution: {integrity: sha512-cp0Rf9Wit2kZHhrV8HIoDFD8dxU2+ZTCFCFbDj3a07pGyyPwLCJm5H5VipKXgYrBaLmlYu73ERidW0S5sdEXEg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-x64-musl@4.1.0': + resolution: {integrity: sha512-4/wf42XWBJGXsOS6BhgPhdQbg/qyfdZ1nZvTL9sJoxYN+Ah+cfY5Dd7R0smzI8hmgCRt3TD1lYb72ChTyIA59w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.0': + resolution: {integrity: sha512-caXJJ0G6NwGbcoxEYdH3MZYN84C3PldaMdAEPMU6bjJXURQlKdSlQ/Ecis7/nSgBkMkicZyhqWmb36Tw/BFSIw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.1.0': + resolution: {integrity: sha512-ZHXRXRxB7HBmkUE8U13nmkGGYfR1I2vsuhiYjeDDUFIYpk1BL6caU8hvzkSlL/X5CAQNdIUUJRGom5I0ZyfJOA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.1.0': + resolution: {integrity: sha512-A33oyZKpPFH08d7xkl13Dc8OTsbPhsuls0z9gUCxIHvn8c1BsUACddQxL6HwaeJR1fSYyXZUw8bdWcD8bVawpQ==} + engines: {node: '>= 10'} + + '@tailwindcss/postcss@4.1.0': + resolution: {integrity: sha512-b2NWFAFfLXY7960jLY5QkKbuYKrQUULx60XU3BCzyaUQpU/7lLf3n2CiHibZPdBq5CIXrUp10wdxhV0EI0Js2g==} + + '@tweenjs/tween.js@18.6.4': + resolution: {integrity: sha512-lB9lMjuqjtuJrx7/kOkqQBtllspPIN+96OvTCeJ2j5FEzinoAXTdAMFnDAQT1KVPRlnYfBrqxtqP66vDM40xxQ==} + + '@tybys/wasm-util@0.9.0': + resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + + '@types/estree@1.0.7': + resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/node@20.17.30': + resolution: {integrity: sha512-7zf4YyHA+jvBNfVrk2Gtvs6x7E8V+YDW05bNfG2XkWDJfYRXrTiP/DsB2zSYTaHX0bGIujTBQdMVAhb+j7mwpg==} + + '@types/react-dom@19.1.1': + resolution: {integrity: sha512-jFf/woGTVTjUJsl2O7hcopJ1r0upqoq/vIOoCj0yLh3RIXxWcljlpuZ+vEBRXsymD1jhfeJrlyTy/S1UW+4y1w==} + peerDependencies: + '@types/react': ^19.0.0 + + '@types/react@19.1.0': + resolution: {integrity: sha512-UaicktuQI+9UKyA4njtDOGBD/67t8YEBt2xdfqu8+gP9hqPUPsiXlNPcpS2gVdjmis5GKPG3fCxbQLVgxsQZ8w==} + + '@typescript-eslint/eslint-plugin@8.29.0': + resolution: {integrity: sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/parser@8.29.0': + resolution: {integrity: sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/scope-manager@8.29.0': + resolution: {integrity: sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.29.0': + resolution: {integrity: sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/types@8.29.0': + resolution: {integrity: sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.29.0': + resolution: {integrity: sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/utils@8.29.0': + resolution: {integrity: sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/visitor-keys@8.29.0': + resolution: {integrity: sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@unrs/resolver-binding-darwin-arm64@1.3.3': + resolution: {integrity: sha512-EpRILdWr3/xDa/7MoyfO7JuBIJqpBMphtu4+80BK1bRfFcniVT74h3Z7q1+WOc92FuIAYatB1vn9TJR67sORGw==} + cpu: [arm64] + os: [darwin] + + '@unrs/resolver-binding-darwin-x64@1.3.3': + resolution: {integrity: sha512-ntj/g7lPyqwinMJWZ+DKHBse8HhVxswGTmNgFKJtdgGub3M3zp5BSZ3bvMP+kBT6dnYJLSVlDqdwOq1P8i0+/g==} + cpu: [x64] + os: [darwin] + + '@unrs/resolver-binding-freebsd-x64@1.3.3': + resolution: {integrity: sha512-l6BT8f2CU821EW7U8hSUK8XPq4bmyTlt9Mn4ERrfjJNoCw0/JoHAh9amZZtV3cwC3bwwIat+GUnrcHTG9+qixw==} + cpu: [x64] + os: [freebsd] + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.3.3': + resolution: {integrity: sha512-8ScEc5a4y7oE2BonRvzJ+2GSkBaYWyh0/Ko4Q25e/ix6ANpJNhwEPZvCR6GVRmsQAYMIfQvYLdM6YEN+qRjnAQ==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm-musleabihf@1.3.3': + resolution: {integrity: sha512-8qQ6l1VTzLNd3xb2IEXISOKwMGXDCzY/UNy/7SovFW2Sp0K3YbL7Ao7R18v6SQkLqQlhhqSBIFRk+u6+qu5R5A==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-gnu@1.3.3': + resolution: {integrity: sha512-v81R2wjqcWXJlQY23byqYHt9221h4anQ6wwN64oMD/WAE+FmxPHFZee5bhRkNVtzqO/q7wki33VFWlhiADwUeQ==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@unrs/resolver-binding-linux-arm64-musl@1.3.3': + resolution: {integrity: sha512-cAOx/j0u5coMg4oct/BwMzvWJdVciVauUvsd+GQB/1FZYKQZmqPy0EjJzJGbVzFc6gbnfEcSqvQE6gvbGf2N8Q==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@unrs/resolver-binding-linux-ppc64-gnu@1.3.3': + resolution: {integrity: sha512-mq2blqwErgDJD4gtFDlTX/HZ7lNP8YCHYFij2gkXPtMzrXxPW1hOtxL6xg4NWxvnj4bppppb0W3s/buvM55yfg==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@unrs/resolver-binding-linux-s390x-gnu@1.3.3': + resolution: {integrity: sha512-u0VRzfFYysarYHnztj2k2xr+eu9rmgoTUUgCCIT37Nr+j0A05Xk2c3RY8Mh5+DhCl2aYibihnaAEJHeR0UOFIQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@unrs/resolver-binding-linux-x64-gnu@1.3.3': + resolution: {integrity: sha512-OrVo5ZsG29kBF0Ug95a2KidS16PqAMmQNozM6InbquOfW/udouk063e25JVLqIBhHLB2WyBnixOQ19tmeC/hIg==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@unrs/resolver-binding-linux-x64-musl@1.3.3': + resolution: {integrity: sha512-PYnmrwZ4HMp9SkrOhqPghY/aoL+Rtd4CQbr93GlrRTjK6kDzfMfgz3UH3jt6elrQAfupa1qyr1uXzeVmoEAxUA==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@unrs/resolver-binding-wasm32-wasi@1.3.3': + resolution: {integrity: sha512-81AnQY6fShmktQw4hWDUIilsKSdvr/acdJ5azAreu2IWNlaJOKphJSsUVWE+yCk6kBMoQyG9ZHCb/krb5K0PEA==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@unrs/resolver-binding-win32-arm64-msvc@1.3.3': + resolution: {integrity: sha512-X/42BMNw7cW6xrB9syuP5RusRnWGoq+IqvJO8IDpp/BZg64J1uuIW6qA/1Cl13Y4LyLXbJVYbYNSKwR/FiHEng==} + cpu: [arm64] + os: [win32] + + '@unrs/resolver-binding-win32-ia32-msvc@1.3.3': + resolution: {integrity: sha512-EGNnNGQxMU5aTN7js3ETYvuw882zcO+dsVjs+DwO2j/fRVKth87C8e2GzxW1L3+iWAXMyJhvFBKRavk9Og1Z6A==} + cpu: [ia32] + os: [win32] + + '@unrs/resolver-binding-win32-x64-msvc@1.3.3': + resolution: {integrity: sha512-GraLbYqOJcmW1qY3osB+2YIiD62nVf2/bVLHZmrb4t/YSUwE03l7TwcDJl08T/Tm3SVhepX8RQkpzWbag/Sb4w==} + cpu: [x64] + os: [win32] + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.6: + resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axe-core@4.10.3: + resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} + engines: {node: '>=4'} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + babel-plugin-styled-components@2.1.4: + resolution: {integrity: sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==} + peerDependencies: + styled-components: '>= 2' + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + bezier-js@6.1.4: + resolution: {integrity: sha512-PA0FW9ZpcHbojUCMu28z9Vg/fNkwTj5YhusSAjHHDfHDGLxJ6YUKrAN2vk1fP2MMOxVw4Oko16FMlRGVBGqLKg==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelize@1.0.1: + resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} + + caniuse-lite@1.0.30001707: + resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + clsx@1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} + engines: {node: '>=6'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + css-color-keywords@1.0.0: + resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} + engines: {node: '>=4'} + + css-to-react-native@3.2.0: + resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + electron-to-chromium@1.5.129: + resolution: {integrity: sha512-JlXUemX4s0+9f8mLqib/bHH8gOHf5elKS6KeWG3sk3xozb/JTq/RLXIv8OKUWiK4Ah00Wm88EFj5PYkFr4RUPA==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} + engines: {node: '>=10.13.0'} + + es-abstract@1.23.9: + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-iterator-helpers@1.2.1: + resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.1.0: + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-next@15.2.4: + resolution: {integrity: sha512-v4gYjd4eYIme8qzaJItpR5MMBXJ0/YV07u7eb50kEnlEmX7yhOjdUdzz70v4fiINYRjLf8X8TbogF0k7wlz6sA==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-import-resolver-typescript@3.10.0: + resolution: {integrity: sha512-aV3/dVsT0/H9BtpNwbaqvl+0xGMRGzncLyhm793NFGvbwGGvzyAykqWZ8oZlZuGwuHkwJjhWJkG1cM3ynvd2pQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + + eslint-module-utils@2.12.0: + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-import@2.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-jsx-a11y@6.10.2: + resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + + eslint-plugin-react-hooks@5.2.0: + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react@7.37.4: + resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + + eslint-scope@8.3.0: + resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.23.0: + resolution: {integrity: sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-equals@2.0.4: + resolution: {integrity: sha512-caj/ZmjHljPrZtbzJ3kfH5ia/k4mTJe/qSiXAGzxZWRZgsgDV0cvNaQULqUX8t0/JVlzzEdYOwCN5DmzTxoD4w==} + + fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fdir@6.4.3: + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.10.0: + resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + inversify@6.2.2: + resolution: {integrity: sha512-KB836KHbZ9WrUnB8ax5MtadOwnqQYa+ZJO3KWbPFgcr4RIEnHM621VaqFZzOZd9+U7ln6upt9n0wJei7x2BNqw==} + peerDependencies: + reflect-metadata: ~0.2.2 + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-bun-module@2.0.0: + resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + iterator.prototype@1.1.5: + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} + engines: {node: '>= 0.4'} + + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lightningcss-darwin-arm64@1.29.2: + resolution: {integrity: sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.29.2: + resolution: {integrity: sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.29.2: + resolution: {integrity: sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.29.2: + resolution: {integrity: sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.29.2: + resolution: {integrity: sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.29.2: + resolution: {integrity: sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.29.2: + resolution: {integrity: sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.29.2: + resolution: {integrity: sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.29.2: + resolution: {integrity: sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.29.2: + resolution: {integrity: sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.29.2: + resolution: {integrity: sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==} + engines: {node: '>= 12.0.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + nanoid@4.0.2: + resolution: {integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==} + engines: {node: ^14 || ^16 || >=18} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + next@15.2.4: + resolution: {integrity: sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ==} + engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.entries@1.1.9: + resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + react-dom@19.1.0: + resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} + peerDependencies: + react: ^19.1.0 + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react@19.1.0: + resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} + engines: {node: '>=0.10.0'} + + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + scheduler@0.26.0: + resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + shallowequal@1.1.0: + resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} + + sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + stable-hash@0.0.5: + resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} + + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + + string.prototype.includes@2.0.1: + resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} + engines: {node: '>= 0.4'} + + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + engines: {node: '>= 0.4'} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + styled-components@5.3.11: + resolution: {integrity: sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==} + engines: {node: '>=10'} + peerDependencies: + react: '>= 16.8.0' + react-dom: '>= 16.8.0' + react-is: '>= 16.8.0' + + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + tailwindcss@4.1.0: + resolution: {integrity: sha512-vBYstoFnvUZCDxaauNGQQEvJNQgCd1vSMDRYuZZMH1xRRcTboOk1rJrW5yFkEabU9X6Yx1C4LQ+QvPOvQj4Daw==} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + tinyglobby@0.2.12: + resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} + engines: {node: '>=12.0.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} + engines: {node: '>=14.17'} + hasBin: true + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + unrs-resolver@1.3.3: + resolution: {integrity: sha512-PFLAGQzYlyjniXdbmQ3dnGMZJXX5yrl2YS4DLRfR3BhgUsE1zpRIrccp9XMOGRfIHpdFvCn/nr5N1KMVda4x3A==} + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@alloc/quick-lru@5.2.0': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.8': {} + + '@babel/core@7.26.10': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.27.0 + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helpers': 7.27.0 + '@babel/parser': 7.27.0 + '@babel/template': 7.27.0 + '@babel/traverse': 7.27.0(supports-color@5.5.0) + '@babel/types': 7.27.0 + convert-source-map: 2.0.0 + debug: 4.4.0(supports-color@5.5.0) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.27.0': + dependencies: + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.25.9': + dependencies: + '@babel/types': 7.27.0 + + '@babel/helper-compilation-targets@7.27.0': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-module-imports@7.25.9(supports-color@5.5.0)': + dependencies: + '@babel/traverse': 7.27.0(supports-color@5.5.0) + '@babel/types': 7.27.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.27.0(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.27.0': + dependencies: + '@babel/template': 7.27.0 + '@babel/types': 7.27.0 + + '@babel/parser@7.27.0': + dependencies: + '@babel/types': 7.27.0 + + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/template@7.27.0': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 + + '@babel/traverse@7.27.0(supports-color@5.5.0)': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.27.0 + '@babel/parser': 7.27.0 + '@babel/template': 7.27.0 + '@babel/types': 7.27.0 + debug: 4.4.0(supports-color@5.5.0) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.27.0': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@dagrejs/graphlib@2.2.2': {} + + '@emnapi/core@1.4.0': + dependencies: + '@emnapi/wasi-threads': 1.0.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.4.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.0.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emotion/is-prop-valid@1.3.1': + dependencies: + '@emotion/memoize': 0.9.0 + + '@emotion/memoize@0.9.0': {} + + '@emotion/stylis@0.8.5': {} + + '@emotion/unitless@0.7.5': {} + + '@eslint-community/eslint-utils@4.5.1(eslint@9.23.0(jiti@2.4.2))': + dependencies: + eslint: 9.23.0(jiti@2.4.2) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.19.2': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.0(supports-color@5.5.0) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.2.1': {} + + '@eslint/core@0.12.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/core@0.13.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': + dependencies: + ajv: 6.12.6 + debug: 4.4.0(supports-color@5.5.0) + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.23.0': {} + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.2.8': + dependencies: + '@eslint/core': 0.13.0 + levn: 0.4.1 + + '@flowgram.ai/background-plugin@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + + '@flowgram.ai/command@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + + '@flowgram.ai/core@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@flowgram.ai/command': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@phosphor/messaging': 1.3.0 + '@tweenjs/tween.js': 18.6.4 + clsx: 1.2.1 + inversify: 6.2.2(reflect-metadata@0.2.2) + lodash: 4.17.21 + nanoid: 4.0.2 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + + '@flowgram.ai/document@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + lodash: 4.17.21 + nanoid: 4.0.2 + reflect-metadata: 0.2.2 + transitivePeerDependencies: + - react + - react-dom + + '@flowgram.ai/editor@0.1.17(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0))': + dependencies: + '@flowgram.ai/background-plugin': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/document': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/form': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/form-core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/group-plugin': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/history': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/history-node-plugin': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)) + '@flowgram.ai/i18n-plugin': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/materials-plugin': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)) + '@flowgram.ai/node': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/node-core-plugin': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)) + '@flowgram.ai/node-variable-plugin': 0.1.17(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)) + '@flowgram.ai/playground-react': 0.1.17(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + '@flowgram.ai/redux-devtool-plugin': 0.1.17(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + '@flowgram.ai/renderer': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/shortcuts-plugin': 0.1.17(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/variable-plugin': 0.1.17(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + transitivePeerDependencies: + - '@babel/core' + - react-is + - styled-components + + '@flowgram.ai/form-core@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/document': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + lodash: 4.17.21 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + + '@flowgram.ai/form@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@flowgram.ai/reactive': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + lodash: 4.17.21 + nanoid: 4.0.2 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + '@flowgram.ai/free-auto-layout-plugin@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0))': + dependencies: + '@dagrejs/graphlib': 2.2.2 + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/document': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/free-layout-core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/renderer': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + lodash: 4.17.21 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + styled-components: 5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + + '@flowgram.ai/free-container-plugin@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0))': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/document': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/free-history-plugin': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/free-layout-core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/free-lines-plugin': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)) + '@flowgram.ai/renderer': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + lodash: 4.17.21 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + styled-components: 5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + + '@flowgram.ai/free-history-plugin@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/document': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/form-core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/free-layout-core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/history': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + lodash: 4.17.21 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + + '@flowgram.ai/free-hover-plugin@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/document': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/free-layout-core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/renderer': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/select-box-plugin': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + + '@flowgram.ai/free-layout-core@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/document': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/form-core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/node': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/reactive': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + lodash-es: 4.17.21 + nanoid: 4.0.2 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + + '@flowgram.ai/free-layout-editor@0.1.17(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0))': + dependencies: + '@flowgram.ai/editor': 0.1.17(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)) + '@flowgram.ai/free-auto-layout-plugin': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)) + '@flowgram.ai/free-history-plugin': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/free-hover-plugin': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/free-layout-core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/free-lines-plugin': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)) + '@flowgram.ai/free-stack-plugin': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)) + '@flowgram.ai/history': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/minimap-plugin': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)) + '@flowgram.ai/select-box-plugin': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + clsx: 1.2.1 + inversify: 6.2.2(reflect-metadata@0.2.2) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + transitivePeerDependencies: + - '@babel/core' + - react-is + - styled-components + + '@flowgram.ai/free-lines-plugin@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0))': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/free-layout-core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/free-stack-plugin': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)) + '@flowgram.ai/renderer': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + bezier-js: 6.1.4 + clsx: 1.2.1 + inversify: 6.2.2(reflect-metadata@0.2.2) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + styled-components: 5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + + '@flowgram.ai/free-node-panel-plugin@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0))': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/document': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/free-history-plugin': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/free-layout-core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/renderer': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + lodash: 4.17.21 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + styled-components: 5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + + '@flowgram.ai/free-snap-plugin@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0))': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/document': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/free-layout-core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/renderer': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + lodash: 4.17.21 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + styled-components: 5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + + '@flowgram.ai/free-stack-plugin@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0))': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/document': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/free-layout-core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/renderer': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + lodash: 4.17.21 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + styled-components: 5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + + '@flowgram.ai/group-plugin@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/document': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/renderer': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + + '@flowgram.ai/history-node-plugin@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0))': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/document': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/form': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/form-core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/history': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/node': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + lodash: 4.17.21 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + styled-components: 5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + + '@flowgram.ai/history@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + lodash: 4.17.21 + nanoid: 4.0.2 + reflect-metadata: 0.2.2 + transitivePeerDependencies: + - react + - react-dom + + '@flowgram.ai/i18n-plugin@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/i18n': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + transitivePeerDependencies: + - react + - react-dom + + '@flowgram.ai/i18n@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + transitivePeerDependencies: + - react + - react-dom + + '@flowgram.ai/materials-plugin@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0))': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/form-core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/renderer': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + styled-components: 5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + + '@flowgram.ai/minimap-plugin@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0))': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/document': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/renderer': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + lodash: 4.17.21 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + styled-components: 5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + + '@flowgram.ai/node-core-plugin@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0))': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/document': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/form-core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/node': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/renderer': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + styled-components: 5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + + '@flowgram.ai/node-variable-plugin@0.1.17(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0))': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/document': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/form-core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/node': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/variable-plugin': 0.1.17(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + lodash: 4.17.21 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + styled-components: 5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + transitivePeerDependencies: + - '@babel/core' + - react-is + + '@flowgram.ai/node@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/document': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/form': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/form-core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + lodash: 4.17.21 + nanoid: 4.0.2 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + + '@flowgram.ai/playground-react@0.1.17(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)': + dependencies: + '@flowgram.ai/background-plugin': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/shortcuts-plugin': 0.1.17(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + transitivePeerDependencies: + - '@babel/core' + - react-is + + '@flowgram.ai/reactive@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + '@flowgram.ai/redux-devtool-plugin@0.1.17(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/variable-core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + reflect-metadata: 0.2.2 + styled-components: 5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + transitivePeerDependencies: + - '@babel/core' + - react + - react-dom + - react-is + + '@flowgram.ai/renderer@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/document': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/i18n': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + lodash: 4.17.21 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + + '@flowgram.ai/select-box-plugin@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/renderer': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + + '@flowgram.ai/shortcuts-plugin@0.1.17(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/document': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + reflect-metadata: 0.2.2 + styled-components: 5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + transitivePeerDependencies: + - '@babel/core' + - react + - react-dom + - react-is + + '@flowgram.ai/utils@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + clsx: 1.2.1 + inversify: 6.2.2(reflect-metadata@0.2.2) + nanoid: 4.0.2 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + + '@flowgram.ai/variable-core@0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + fast-equals: 2.0.4 + inversify: 6.2.2(reflect-metadata@0.2.2) + lodash: 4.17.21 + nanoid: 4.0.2 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + reflect-metadata: 0.2.2 + rxjs: 7.8.2 + + '@flowgram.ai/variable-layout@0.1.17(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/document': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/free-layout-core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/variable-core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + reflect-metadata: 0.2.2 + styled-components: 5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + transitivePeerDependencies: + - '@babel/core' + - react + - react-dom + - react-is + + '@flowgram.ai/variable-plugin@0.1.17(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)': + dependencies: + '@flowgram.ai/core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/document': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/free-layout-core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/utils': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/variable-core': 0.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@flowgram.ai/variable-layout': 0.1.17(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + inversify: 6.2.2(reflect-metadata@0.2.2) + reflect-metadata: 0.2.2 + styled-components: 5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + transitivePeerDependencies: + - '@babel/core' + - react + - react-dom + - react-is + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.2': {} + + '@img/sharp-darwin-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.4 + optional: true + + '@img/sharp-darwin-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.0.5': + optional: true + + '@img/sharp-libvips-linux-s390x@1.0.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + optional: true + + '@img/sharp-linux-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 + optional: true + + '@img/sharp-linux-arm@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.5 + optional: true + + '@img/sharp-linux-s390x@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.4 + optional: true + + '@img/sharp-linux-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + optional: true + + '@img/sharp-wasm32@0.33.5': + dependencies: + '@emnapi/runtime': 1.4.0 + optional: true + + '@img/sharp-win32-ia32@0.33.5': + optional: true + + '@img/sharp-win32-x64@0.33.5': + optional: true + + '@inversifyjs/common@1.4.0': {} + + '@inversifyjs/core@1.3.5(reflect-metadata@0.2.2)': + dependencies: + '@inversifyjs/common': 1.4.0 + '@inversifyjs/reflect-metadata-utils': 0.2.4(reflect-metadata@0.2.2) + transitivePeerDependencies: + - reflect-metadata + + '@inversifyjs/reflect-metadata-utils@0.2.4(reflect-metadata@0.2.2)': + dependencies: + reflect-metadata: 0.2.2 + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@napi-rs/wasm-runtime@0.2.8': + dependencies: + '@emnapi/core': 1.4.0 + '@emnapi/runtime': 1.4.0 + '@tybys/wasm-util': 0.9.0 + optional: true + + '@next/env@15.2.4': {} + + '@next/eslint-plugin-next@15.2.4': + dependencies: + fast-glob: 3.3.1 + + '@next/swc-darwin-arm64@15.2.4': + optional: true + + '@next/swc-darwin-x64@15.2.4': + optional: true + + '@next/swc-linux-arm64-gnu@15.2.4': + optional: true + + '@next/swc-linux-arm64-musl@15.2.4': + optional: true + + '@next/swc-linux-x64-gnu@15.2.4': + optional: true + + '@next/swc-linux-x64-musl@15.2.4': + optional: true + + '@next/swc-win32-arm64-msvc@15.2.4': + optional: true + + '@next/swc-win32-x64-msvc@15.2.4': + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@nolyfill/is-core-module@1.0.39': {} + + '@phosphor/algorithm@1.2.0': {} + + '@phosphor/collections@1.2.0': + dependencies: + '@phosphor/algorithm': 1.2.0 + + '@phosphor/messaging@1.3.0': + dependencies: + '@phosphor/algorithm': 1.2.0 + '@phosphor/collections': 1.2.0 + + '@rtsao/scc@1.1.0': {} + + '@rushstack/eslint-patch@1.11.0': {} + + '@swc/counter@0.1.3': {} + + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + + '@tailwindcss/node@4.1.0': + dependencies: + enhanced-resolve: 5.18.1 + jiti: 2.4.2 + lightningcss: 1.29.2 + tailwindcss: 4.1.0 + + '@tailwindcss/oxide-android-arm64@4.1.0': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.1.0': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.1.0': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.1.0': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.0': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.0': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.1.0': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.1.0': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.1.0': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.0': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.1.0': + optional: true + + '@tailwindcss/oxide@4.1.0': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.1.0 + '@tailwindcss/oxide-darwin-arm64': 4.1.0 + '@tailwindcss/oxide-darwin-x64': 4.1.0 + '@tailwindcss/oxide-freebsd-x64': 4.1.0 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.0 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.0 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.0 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.0 + '@tailwindcss/oxide-linux-x64-musl': 4.1.0 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.0 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.0 + + '@tailwindcss/postcss@4.1.0': + dependencies: + '@alloc/quick-lru': 5.2.0 + '@tailwindcss/node': 4.1.0 + '@tailwindcss/oxide': 4.1.0 + postcss: 8.5.3 + tailwindcss: 4.1.0 + + '@tweenjs/tween.js@18.6.4': {} + + '@tybys/wasm-util@0.9.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/estree@1.0.7': {} + + '@types/json-schema@7.0.15': {} + + '@types/json5@0.0.29': {} + + '@types/node@20.17.30': + dependencies: + undici-types: 6.19.8 + + '@types/react-dom@19.1.1(@types/react@19.1.0)': + dependencies: + '@types/react': 19.1.0 + + '@types/react@19.1.0': + dependencies: + csstype: 3.1.3 + + '@typescript-eslint/eslint-plugin@8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/scope-manager': 8.29.0 + '@typescript-eslint/type-utils': 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/utils': 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.29.0 + eslint: 9.23.0(jiti@2.4.2) + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)': + dependencies: + '@typescript-eslint/scope-manager': 8.29.0 + '@typescript-eslint/types': 8.29.0 + '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.29.0 + debug: 4.4.0(supports-color@5.5.0) + eslint: 9.23.0(jiti@2.4.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.29.0': + dependencies: + '@typescript-eslint/types': 8.29.0 + '@typescript-eslint/visitor-keys': 8.29.0 + + '@typescript-eslint/type-utils@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)': + dependencies: + '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.8.2) + '@typescript-eslint/utils': 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) + debug: 4.4.0(supports-color@5.5.0) + eslint: 9.23.0(jiti@2.4.2) + ts-api-utils: 2.1.0(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.29.0': {} + + '@typescript-eslint/typescript-estree@8.29.0(typescript@5.8.2)': + dependencies: + '@typescript-eslint/types': 8.29.0 + '@typescript-eslint/visitor-keys': 8.29.0 + debug: 4.4.0(supports-color@5.5.0) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.1 + ts-api-utils: 2.1.0(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)': + dependencies: + '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.29.0 + '@typescript-eslint/types': 8.29.0 + '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.8.2) + eslint: 9.23.0(jiti@2.4.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.29.0': + dependencies: + '@typescript-eslint/types': 8.29.0 + eslint-visitor-keys: 4.2.0 + + '@unrs/resolver-binding-darwin-arm64@1.3.3': + optional: true + + '@unrs/resolver-binding-darwin-x64@1.3.3': + optional: true + + '@unrs/resolver-binding-freebsd-x64@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-arm-musleabihf@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-arm64-gnu@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-arm64-musl@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-ppc64-gnu@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-s390x-gnu@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-x64-gnu@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-x64-musl@1.3.3': + optional: true + + '@unrs/resolver-binding-wasm32-wasi@1.3.3': + dependencies: + '@napi-rs/wasm-runtime': 0.2.8 + optional: true + + '@unrs/resolver-binding-win32-arm64-msvc@1.3.3': + optional: true + + '@unrs/resolver-binding-win32-ia32-msvc@1.3.3': + optional: true + + '@unrs/resolver-binding-win32-x64-msvc@1.3.3': + optional: true + + acorn-jsx@5.3.2(acorn@8.14.1): + dependencies: + acorn: 8.14.1 + + acorn@8.14.1: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + argparse@2.0.1: {} + + aria-query@5.3.2: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + array-includes@3.1.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + is-string: 1.1.1 + + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 + + array.prototype.findlastindex@1.2.6: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 + + array.prototype.flat@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-shim-unscopables: 1.1.0 + + array.prototype.flatmap@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-shim-unscopables: 1.1.0 + + array.prototype.tosorted@1.1.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-shim-unscopables: 1.1.0 + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + + ast-types-flow@0.0.8: {} + + async-function@1.0.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + axe-core@4.10.3: {} + + axobject-query@4.1.0: {} + + babel-plugin-styled-components@2.1.4(@babel/core@7.26.10)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0))(supports-color@5.5.0): + dependencies: + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) + lodash: 4.17.21 + picomatch: 2.3.1 + styled-components: 5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + transitivePeerDependencies: + - '@babel/core' + - supports-color + + balanced-match@1.0.2: {} + + bezier-js@6.1.4: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001707 + electron-to-chromium: 1.5.129 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.24.4) + + busboy@1.6.0: + dependencies: + streamsearch: 1.1.0 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + camelize@1.0.1: {} + + caniuse-lite@1.0.30001707: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + client-only@0.0.1: {} + + clsx@1.2.1: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + optional: true + + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + optional: true + + concat-map@0.0.1: {} + + convert-source-map@2.0.0: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + css-color-keywords@1.0.0: {} + + css-to-react-native@3.2.0: + dependencies: + camelize: 1.0.1 + css-color-keywords: 1.0.0 + postcss-value-parser: 4.2.0 + + csstype@3.1.3: {} + + damerau-levenshtein@1.0.8: {} + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.4.0(supports-color@5.5.0): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 5.5.0 + + deep-is@0.1.4: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + detect-libc@2.0.3: {} + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + electron-to-chromium@1.5.129: {} + + emoji-regex@9.2.2: {} + + enhanced-resolve@5.18.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + es-abstract@1.23.9: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.19 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-iterator-helpers@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-set-tostringtag: 2.1.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + iterator.prototype: 1.1.5 + safe-array-concat: 1.1.3 + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-shim-unscopables@1.1.0: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-config-next@15.2.4(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2): + dependencies: + '@next/eslint-plugin-next': 15.2.4 + '@rushstack/eslint-patch': 1.11.0 + '@typescript-eslint/eslint-plugin': 8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/parser': 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) + eslint: 9.23.0(jiti@2.4.2) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.23.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.10.0)(eslint@9.23.0(jiti@2.4.2)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.23.0(jiti@2.4.2)) + eslint-plugin-react: 7.37.4(eslint@9.23.0(jiti@2.4.2)) + eslint-plugin-react-hooks: 5.2.0(eslint@9.23.0(jiti@2.4.2)) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + + eslint-import-resolver-node@0.3.9: + dependencies: + debug: 3.2.7 + is-core-module: 2.16.1 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0)(eslint@9.23.0(jiti@2.4.2)): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.0(supports-color@5.5.0) + eslint: 9.23.0(jiti@2.4.2) + get-tsconfig: 4.10.0 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.12 + unrs-resolver: 1.3.3 + optionalDependencies: + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.10.0)(eslint@9.23.0(jiti@2.4.2)) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.23.0(jiti@2.4.2)): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) + eslint: 9.23.0(jiti@2.4.2) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.23.0(jiti@2.4.2)) + transitivePeerDependencies: + - supports-color + + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.10.0)(eslint@9.23.0(jiti@2.4.2)): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 9.23.0(jiti@2.4.2) + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.23.0(jiti@2.4.2)) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-jsx-a11y@6.10.2(eslint@9.23.0(jiti@2.4.2)): + dependencies: + aria-query: 5.3.2 + array-includes: 3.1.8 + array.prototype.flatmap: 1.3.3 + ast-types-flow: 0.0.8 + axe-core: 4.10.3 + axobject-query: 4.1.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 9.23.0(jiti@2.4.2) + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 + + eslint-plugin-react-hooks@5.2.0(eslint@9.23.0(jiti@2.4.2)): + dependencies: + eslint: 9.23.0(jiti@2.4.2) + + eslint-plugin-react@7.37.4(eslint@9.23.0(jiti@2.4.2)): + dependencies: + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.2.1 + eslint: 9.23.0(jiti@2.4.2) + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.9 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 + + eslint-scope@8.3.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.0: {} + + eslint@9.23.0(jiti@2.4.2): + dependencies: + '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0(jiti@2.4.2)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.2 + '@eslint/config-helpers': 0.2.1 + '@eslint/core': 0.12.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.23.0 + '@eslint/plugin-kit': 0.2.8 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.2 + '@types/estree': 1.0.7 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0(supports-color@5.5.0) + escape-string-regexp: 4.0.0 + eslint-scope: 8.3.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.4.2 + transitivePeerDependencies: + - supports-color + + espree@10.3.0: + dependencies: + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) + eslint-visitor-keys: 4.2.0 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-equals@2.0.4: {} + + fast-glob@3.3.1: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fdir@6.4.3(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flatted@3.3.3: {} + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + function-bind@1.1.2: {} + + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + + gensync@1.0.0-beta.2: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + + get-tsconfig@4.10.0: + dependencies: + resolve-pkg-maps: 1.0.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + globals@11.12.0: {} + + globals@14.0.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + has-bigints@1.1.0: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hoist-non-react-statics@3.3.2: + dependencies: + react-is: 16.13.1 + + ignore@5.3.2: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + + inversify@6.2.2(reflect-metadata@0.2.2): + dependencies: + '@inversifyjs/common': 1.4.0 + '@inversifyjs/core': 1.3.5(reflect-metadata@0.2.2) + reflect-metadata: 0.2.2 + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-arrayish@0.3.2: + optional: true + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-bun-module@2.0.0: + dependencies: + semver: 7.7.1 + + is-callable@1.2.7: {} + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-generator-function@1.1.0: + dependencies: + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-map@2.0.3: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.19 + + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + iterator.prototype@1.1.5: + dependencies: + define-data-property: 1.1.4 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + has-symbols: 1.1.0 + set-function-name: 2.0.2 + + jiti@2.4.2: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + json5@2.2.3: {} + + jsx-ast-utils@3.3.5: + dependencies: + array-includes: 3.1.8 + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 + object.values: 1.2.1 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + language-subtag-registry@0.3.23: {} + + language-tags@1.0.9: + dependencies: + language-subtag-registry: 0.3.23 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lightningcss-darwin-arm64@1.29.2: + optional: true + + lightningcss-darwin-x64@1.29.2: + optional: true + + lightningcss-freebsd-x64@1.29.2: + optional: true + + lightningcss-linux-arm-gnueabihf@1.29.2: + optional: true + + lightningcss-linux-arm64-gnu@1.29.2: + optional: true + + lightningcss-linux-arm64-musl@1.29.2: + optional: true + + lightningcss-linux-x64-gnu@1.29.2: + optional: true + + lightningcss-linux-x64-musl@1.29.2: + optional: true + + lightningcss-win32-arm64-msvc@1.29.2: + optional: true + + lightningcss-win32-x64-msvc@1.29.2: + optional: true + + lightningcss@1.29.2: + dependencies: + detect-libc: 2.0.3 + optionalDependencies: + lightningcss-darwin-arm64: 1.29.2 + lightningcss-darwin-x64: 1.29.2 + lightningcss-freebsd-x64: 1.29.2 + lightningcss-linux-arm-gnueabihf: 1.29.2 + lightningcss-linux-arm64-gnu: 1.29.2 + lightningcss-linux-arm64-musl: 1.29.2 + lightningcss-linux-x64-gnu: 1.29.2 + lightningcss-linux-x64-musl: 1.29.2 + lightningcss-win32-arm64-msvc: 1.29.2 + lightningcss-win32-x64-msvc: 1.29.2 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash-es@4.17.21: {} + + lodash.merge@4.6.2: {} + + lodash@4.17.21: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + math-intrinsics@1.1.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + ms@2.1.3: {} + + nanoid@3.3.11: {} + + nanoid@4.0.2: {} + + natural-compare@1.4.0: {} + + next@15.2.4(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@next/env': 15.2.4 + '@swc/counter': 0.1.3 + '@swc/helpers': 0.5.15 + busboy: 1.6.0 + caniuse-lite: 1.0.30001707 + postcss: 8.4.31 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + styled-jsx: 5.1.6(@babel/core@7.26.10)(react@19.1.0) + optionalDependencies: + '@next/swc-darwin-arm64': 15.2.4 + '@next/swc-darwin-x64': 15.2.4 + '@next/swc-linux-arm64-gnu': 15.2.4 + '@next/swc-linux-arm64-musl': 15.2.4 + '@next/swc-linux-x64-gnu': 15.2.4 + '@next/swc-linux-x64-musl': 15.2.4 + '@next/swc-win32-arm64-msvc': 15.2.4 + '@next/swc-win32-x64-msvc': 15.2.4 + sharp: 0.33.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + + node-releases@2.0.19: {} + + object-assign@4.1.1: {} + + object-inspect@1.13.4: {} + + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.entries@1.1.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + + object.values@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.2: {} + + possible-typed-array-names@1.1.0: {} + + postcss-value-parser@4.2.0: {} + + postcss@8.4.31: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.5.3: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + react-dom@19.1.0(react@19.1.0): + dependencies: + react: 19.1.0 + scheduler: 0.26.0 + + react-is@16.13.1: {} + + react@19.1.0: {} + + reflect-metadata@0.2.2: {} + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + resolve-from@4.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + resolve@2.0.0-next.5: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.1.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + + scheduler@0.26.0: {} + + semver@6.3.1: {} + + semver@7.7.1: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + + shallowequal@1.1.0: {} + + sharp@0.33.5: + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + semver: 7.7.1 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-s390x': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@img/sharp-wasm32': 0.33.5 + '@img/sharp-win32-ia32': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 + optional: true + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + optional: true + + source-map-js@1.2.1: {} + + stable-hash@0.0.5: {} + + streamsearch@1.1.0: {} + + string.prototype.includes@2.0.1: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + + string.prototype.matchall@4.0.12: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 + set-function-name: 2.0.2 + side-channel: 1.1.0 + + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.9 + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + strip-bom@3.0.0: {} + + strip-json-comments@3.1.1: {} + + styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0): + dependencies: + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.27.0(supports-color@5.5.0) + '@emotion/is-prop-valid': 1.3.1 + '@emotion/stylis': 0.8.5 + '@emotion/unitless': 0.7.5 + babel-plugin-styled-components: 2.1.4(@babel/core@7.26.10)(styled-components@5.3.11(@babel/core@7.26.10)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0))(supports-color@5.5.0) + css-to-react-native: 3.2.0 + hoist-non-react-statics: 3.3.2 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-is: 16.13.1 + shallowequal: 1.1.0 + supports-color: 5.5.0 + transitivePeerDependencies: + - '@babel/core' + + styled-jsx@5.1.6(@babel/core@7.26.10)(react@19.1.0): + dependencies: + client-only: 0.0.1 + react: 19.1.0 + optionalDependencies: + '@babel/core': 7.26.10 + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + tailwindcss@4.1.0: {} + + tapable@2.2.1: {} + + tinyglobby@0.2.12: + dependencies: + fdir: 6.4.3(picomatch@4.0.2) + picomatch: 4.0.2 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + ts-api-utils@2.1.0(typescript@5.8.2): + dependencies: + typescript: 5.8.2 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tslib@2.8.1: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + + typescript@5.8.2: {} + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + + undici-types@6.19.8: {} + + unrs-resolver@1.3.3: + optionalDependencies: + '@unrs/resolver-binding-darwin-arm64': 1.3.3 + '@unrs/resolver-binding-darwin-x64': 1.3.3 + '@unrs/resolver-binding-freebsd-x64': 1.3.3 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.3.3 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.3.3 + '@unrs/resolver-binding-linux-arm64-gnu': 1.3.3 + '@unrs/resolver-binding-linux-arm64-musl': 1.3.3 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.3.3 + '@unrs/resolver-binding-linux-s390x-gnu': 1.3.3 + '@unrs/resolver-binding-linux-x64-gnu': 1.3.3 + '@unrs/resolver-binding-linux-x64-musl': 1.3.3 + '@unrs/resolver-binding-wasm32-wasi': 1.3.3 + '@unrs/resolver-binding-win32-arm64-msvc': 1.3.3 + '@unrs/resolver-binding-win32-ia32-msvc': 1.3.3 + '@unrs/resolver-binding-win32-x64-msvc': 1.3.3 + + update-browserslist-db@1.1.3(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.0 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.19 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + yallist@3.1.1: {} + + yocto-queue@0.1.0: {} diff --git a/apps/demo-nextjs-antd/postcss.config.mjs b/apps/demo-nextjs-antd/postcss.config.mjs new file mode 100644 index 00000000..ba720fe5 --- /dev/null +++ b/apps/demo-nextjs-antd/postcss.config.mjs @@ -0,0 +1,5 @@ +const config = { + plugins: ['@tailwindcss/postcss'], +}; + +export default config; diff --git a/apps/demo-nextjs-antd/public/file.svg b/apps/demo-nextjs-antd/public/file.svg new file mode 100644 index 00000000..004145cd --- /dev/null +++ b/apps/demo-nextjs-antd/public/file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/demo-nextjs-antd/public/globe.svg b/apps/demo-nextjs-antd/public/globe.svg new file mode 100644 index 00000000..567f17b0 --- /dev/null +++ b/apps/demo-nextjs-antd/public/globe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/demo-nextjs-antd/public/next.svg b/apps/demo-nextjs-antd/public/next.svg new file mode 100644 index 00000000..5174b28c --- /dev/null +++ b/apps/demo-nextjs-antd/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/demo-nextjs-antd/public/vercel.svg b/apps/demo-nextjs-antd/public/vercel.svg new file mode 100644 index 00000000..77053960 --- /dev/null +++ b/apps/demo-nextjs-antd/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/demo-nextjs-antd/public/window.svg b/apps/demo-nextjs-antd/public/window.svg new file mode 100644 index 00000000..b2b2a44f --- /dev/null +++ b/apps/demo-nextjs-antd/public/window.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/demo-nextjs-antd/src/app/favicon.ico b/apps/demo-nextjs-antd/src/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 zcmeHv30#a{`}aL_*G&7qml|y<+KVaDM2m#dVr!KsA!#An?kSQM(q<_dDNCpjEux83 zLb9Z^XxbDl(w>%i@8hT6>)&Gu{h#Oeyszu?xtw#Zb1mO{pgX9699l+Qppw7jXaYf~-84xW z)w4x8?=youko|}Vr~(D$UXIbiXABHh`p1?nn8Po~fxRJv}|0e(BPs|G`(TT%kKVJAdg5*Z|x0leQq0 zkdUBvb#>9F()jo|T~kx@OM8$9wzs~t2l;K=woNssA3l6|sx2r3+kdfVW@e^8e*E}v zA1y5{bRi+3Z`uD3{F7LgFJDdvm;nJilkzDku>BwXH(8ItVCXk*-lSJnR?-2UN%hJ){&rlvg`CDTj z)Bzo!3v7Ou#83zEDEFcKt(f1E0~=rqeEbTnMvWR#{+9pg%7G8y>u1OVRUSoox-ovF z2Ydma(;=YuBY(eI|04{hXzZD6_f(v~H;C~y5=DhAC{MMS>2fm~1H_t2$56pc$NH8( z5bH|<)71dV-_oCHIrzrT`2s-5w_+2CM0$95I6X8p^r!gHp+j_gd;9O<1~CEQQGS8) zS9Qh3#p&JM-G8rHekNmKVewU;pJRcTAog68KYo^dRo}(M>36U4Us zfgYWSiHZL3;lpWT=zNAW>Dh#mB!_@Lg%$ms8N-;aPqMn+C2HqZgz&9~Eu z4|Kp<`$q)Uw1R?y(~S>ePdonHxpV1#eSP1B;Ogo+-Pk}6#0GsZZ5!||ev2MGdh}_m z{DeR7?0-1^zVs&`AV6Vt;r3`I`OI_wgs*w=eO%_#7Kepl{B@xiyCANc(l zzIyd4y|c6PXWq9-|KM8(zIk8LPk(>a)zyFWjhT!$HJ$qX1vo@d25W<fvZQ2zUz5WRc(UnFMKHwe1| zWmlB1qdbiA(C0jmnV<}GfbKtmcu^2*P^O?MBLZKt|As~ge8&AAO~2K@zbXelK|4T<{|y4`raF{=72kC2Kn(L4YyenWgrPiv z@^mr$t{#X5VuIMeL!7Ab6_kG$&#&5p*Z{+?5U|TZ`B!7llpVmp@skYz&n^8QfPJzL z0G6K_OJM9x+Wu2gfN45phANGt{7=C>i34CV{Xqlx(fWpeAoj^N0Biu`w+MVcCUyU* zDZuzO0>4Z6fbu^T_arWW5n!E45vX8N=bxTVeFoep_G#VmNlQzAI_KTIc{6>c+04vr zx@W}zE5JNSU>!THJ{J=cqjz+4{L4A{Ob9$ZJ*S1?Ggg3klFp!+Y1@K+pK1DqI|_gq z5ZDXVpge8-cs!o|;K73#YXZ3AShj50wBvuq3NTOZ`M&qtjj#GOFfgExjg8Gn8>Vq5 z`85n+9|!iLCZF5$HJ$Iu($dm?8~-ofu}tEc+-pyke=3!im#6pk_Wo8IA|fJwD&~~F zc16osQ)EBo58U7XDuMexaPRjU@h8tXe%S{fA0NH3vGJFhuyyO!Uyl2^&EOpX{9As0 zWj+P>{@}jxH)8|r;2HdupP!vie{sJ28b&bo!8`D^x}TE$%zXNb^X1p@0PJ86`dZyj z%ce7*{^oo+6%&~I!8hQy-vQ7E)0t0ybH4l%KltWOo~8cO`T=157JqL(oq_rC%ea&4 z2NcTJe-HgFjNg-gZ$6!Y`SMHrlj}Etf7?r!zQTPPSv}{so2e>Fjs1{gzk~LGeesX%r(Lh6rbhSo_n)@@G-FTQy93;l#E)hgP@d_SGvyCp0~o(Y;Ee8{ zdVUDbHm5`2taPUOY^MAGOw*>=s7=Gst=D+p+2yON!0%Hk` zz5mAhyT4lS*T3LS^WSxUy86q&GnoHxzQ6vm8)VS}_zuqG?+3td68_x;etQAdu@sc6 zQJ&5|4(I?~3d-QOAODHpZ=hlSg(lBZ!JZWCtHHSj`0Wh93-Uk)_S%zsJ~aD>{`A0~ z9{AG(e|q3g5B%wYKRxiL2Y$8(4w6bzchKuloQW#e&S3n+P- z8!ds-%f;TJ1>)v)##>gd{PdS2Oc3VaR`fr=`O8QIO(6(N!A?pr5C#6fc~Ge@N%Vvu zaoAX2&(a6eWy_q&UwOhU)|P3J0Qc%OdhzW=F4D|pt0E4osw;%<%Dn58hAWD^XnZD= z>9~H(3bmLtxpF?a7su6J7M*x1By7YSUbxGi)Ot0P77`}P3{)&5Un{KD?`-e?r21!4vTTnN(4Y6Lin?UkSM z`MXCTC1@4A4~mvz%Rh2&EwY))LeoT=*`tMoqcEXI>TZU9WTP#l?uFv+@Dn~b(>xh2 z;>B?;Tz2SR&KVb>vGiBSB`@U7VIWFSo=LDSb9F{GF^DbmWAfpms8Sx9OX4CnBJca3 zlj9(x!dIjN?OG1X4l*imJNvRCk}F%!?SOfiOq5y^mZW)jFL@a|r-@d#f7 z2gmU8L3IZq0ynIws=}~m^#@&C%J6QFo~Mo4V`>v7MI-_!EBMMtb%_M&kvAaN)@ZVw z+`toz&WG#HkWDjnZE!6nk{e-oFdL^$YnbOCN}JC&{$#$O27@|Tn-skXr)2ml2~O!5 zX+gYoxhoc7qoU?C^3~&!U?kRFtnSEecWuH0B0OvLodgUAi}8p1 zrO6RSXHH}DMc$&|?D004DiOVMHV8kXCP@7NKB zgaZq^^O<7PoKEp72kby@W0Z!Y*Ay{&vfg#C&gG@YVR9g?FEocMUi1gSN$+V+ayF45{a zuDZDTN}mS|;BO%gEf}pjBfN2-gIrU#G5~cucA;dokXW89%>AyXJJI z9X4UlIWA|ZYHgbI z5?oFk@A=Ik7lrEQPDH!H+b`7_Y~aDb_qa=B2^Y&Ow41cU=4WDd40dp5(QS-WMN-=Y z9g;6_-JdNU;|6cPwf$ak*aJIcwL@1n$#l~zi{c{EW?T;DaW*E8DYq?Umtz{nJ&w-M zEMyTDrC&9K$d|kZe2#ws6)L=7K+{ zQw{XnV6UC$6-rW0emqm8wJoeZK)wJIcV?dST}Z;G0Arq{dVDu0&4kd%N!3F1*;*pW zR&qUiFzK=@44#QGw7k1`3t_d8&*kBV->O##t|tonFc2YWrL7_eqg+=+k;!F-`^b8> z#KWCE8%u4k@EprxqiV$VmmtiWxDLgnGu$Vs<8rppV5EajBXL4nyyZM$SWVm!wnCj-B!Wjqj5-5dNXukI2$$|Bu3Lrw}z65Lc=1G z^-#WuQOj$hwNGG?*CM_TO8Bg-1+qc>J7k5c51U8g?ZU5n?HYor;~JIjoWH-G>AoUP ztrWWLbRNqIjW#RT*WqZgPJXU7C)VaW5}MiijYbABmzoru6EmQ*N8cVK7a3|aOB#O& zBl8JY2WKfmj;h#Q!pN%9o@VNLv{OUL?rixHwOZuvX7{IJ{(EdPpuVFoQqIOa7giLVkBOKL@^smUA!tZ1CKRK}#SSM)iQHk)*R~?M!qkCruaS!#oIL1c z?J;U~&FfH#*98^G?i}pA{ z9Jg36t4=%6mhY(quYq*vSxptes9qy|7xSlH?G=S@>u>Ebe;|LVhs~@+06N<4CViBk zUiY$thvX;>Tby6z9Y1edAMQaiH zm^r3v#$Q#2T=X>bsY#D%s!bhs^M9PMAcHbCc0FMHV{u-dwlL;a1eJ63v5U*?Q_8JO zT#50!RD619#j_Uf))0ooADz~*9&lN!bBDRUgE>Vud-i5ck%vT=r^yD*^?Mp@Q^v+V zG#-?gKlr}Eeqifb{|So?HM&g91P8|av8hQoCmQXkd?7wIJwb z_^v8bbg`SAn{I*4bH$u(RZ6*xUhuA~hc=8czK8SHEKTzSxgbwi~9(OqJB&gwb^l4+m`k*Q;_?>Y-APi1{k zAHQ)P)G)f|AyjSgcCFps)Fh6Bca*Xznq36!pV6Az&m{O8$wGFD? zY&O*3*J0;_EqM#jh6^gMQKpXV?#1?>$ml1xvh8nSN>-?H=V;nJIwB07YX$e6vLxH( zqYwQ>qxwR(i4f)DLd)-$P>T-no_c!LsN@)8`e;W@)-Hj0>nJ-}Kla4-ZdPJzI&Mce zv)V_j;(3ERN3_@I$N<^|4Lf`B;8n+bX@bHbcZTopEmDI*Jfl)-pFDvo6svPRoo@(x z);_{lY<;);XzT`dBFpRmGrr}z5u1=pC^S-{ce6iXQlLGcItwJ^mZx{m$&DA_oEZ)B{_bYPq-HA zcH8WGoBG(aBU_j)vEy+_71T34@4dmSg!|M8Vf92Zj6WH7Q7t#OHQqWgFE3ARt+%!T z?oLovLVlnf?2c7pTc)~cc^($_8nyKwsN`RA-23ed3sdj(ys%pjjM+9JrctL;dy8a( z@en&CQmnV(()bu|Y%G1-4a(6x{aLytn$T-;(&{QIJB9vMox11U-1HpD@d(QkaJdEb zG{)+6Dos_L+O3NpWo^=gR?evp|CqEG?L&Ut#D*KLaRFOgOEK(Kq1@!EGcTfo+%A&I z=dLbB+d$u{sh?u)xP{PF8L%;YPPW53+@{>5W=Jt#wQpN;0_HYdw1{ksf_XhO4#2F= zyPx6Lx2<92L-;L5PD`zn6zwIH`Jk($?Qw({erA$^bC;q33hv!d!>%wRhj# zal^hk+WGNg;rJtb-EB(?czvOM=H7dl=vblBwAv>}%1@{}mnpUznfq1cE^sgsL0*4I zJ##!*B?=vI_OEVis5o+_IwMIRrpQyT_Sq~ZU%oY7c5JMIADzpD!Upz9h@iWg_>>~j zOLS;wp^i$-E?4<_cp?RiS%Rd?i;f*mOz=~(&3lo<=@(nR!_Rqiprh@weZlL!t#NCc zO!QTcInq|%#>OVgobj{~ixEUec`E25zJ~*DofsQdzIa@5^nOXj2T;8O`l--(QyU^$t?TGY^7#&FQ+2SS3B#qK*k3`ye?8jUYSajE5iBbJls75CCc(m3dk{t?- zopcER9{Z?TC)mk~gpi^kbbu>b-+a{m#8-y2^p$ka4n60w;Sc2}HMf<8JUvhCL0B&Btk)T`ctE$*qNW8L$`7!r^9T+>=<=2qaq-;ll2{`{Rg zc5a0ZUI$oG&j-qVOuKa=*v4aY#IsoM+1|c4Z)<}lEDvy;5huB@1RJPquU2U*U-;gu z=En2m+qjBzR#DEJDO`WU)hdd{Vj%^0V*KoyZ|5lzV87&g_j~NCjwv0uQVqXOb*QrQ zy|Qn`hxx(58c70$E;L(X0uZZ72M1!6oeg)(cdKO ze0gDaTz+ohR-#d)NbAH4x{I(21yjwvBQfmpLu$)|m{XolbgF!pmsqJ#D}(ylp6uC> z{bqtcI#hT#HW=wl7>p!38sKsJ`r8}lt-q%Keqy%u(xk=yiIJiUw6|5IvkS+#?JTBl z8H5(Q?l#wzazujH!8o>1xtn8#_w+397*_cy8!pQGP%K(Ga3pAjsaTbbXJlQF_+m+-UpUUent@xM zg%jqLUExj~o^vQ3Gl*>wh=_gOr2*|U64_iXb+-111aH}$TjeajM+I20xw(((>fej-@CIz4S1pi$(#}P7`4({6QS2CaQS4NPENDp>sAqD z$bH4KGzXGffkJ7R>V>)>tC)uax{UsN*dbeNC*v}#8Y#OWYwL4t$ePR?VTyIs!wea+ z5Urmc)X|^`MG~*dS6pGSbU+gPJoq*^a=_>$n4|P^w$sMBBy@f*Z^Jg6?n5?oId6f{ z$LW4M|4m502z0t7g<#Bx%X;9<=)smFolV&(V^(7Cv2-sxbxopQ!)*#ZRhTBpx1)Fc zNm1T%bONzv6@#|dz(w02AH8OXe>kQ#1FMCzO}2J_mST)+ExmBr9cva-@?;wnmWMOk z{3_~EX_xadgJGv&H@zK_8{(x84`}+c?oSBX*Ge3VdfTt&F}yCpFP?CpW+BE^cWY0^ zb&uBN!Ja3UzYHK-CTyA5=L zEMW{l3Usky#ly=7px648W31UNV@K)&Ub&zP1c7%)`{);I4b0Q<)B}3;NMG2JH=X$U zfIW4)4n9ZM`-yRj67I)YSLDK)qfUJ_ij}a#aZN~9EXrh8eZY2&=uY%2N0UFF7<~%M zsB8=erOWZ>Ct_#^tHZ|*q`H;A)5;ycw*IcmVxi8_0Xk}aJA^ath+E;xg!x+As(M#0=)3!NJR6H&9+zd#iP(m0PIW8$ z1Y^VX`>jm`W!=WpF*{ioM?C9`yOR>@0q=u7o>BP-eSHqCgMDj!2anwH?s%i2p+Q7D zzszIf5XJpE)IG4;d_(La-xenmF(tgAxK`Y4sQ}BSJEPs6N_U2vI{8=0C_F?@7<(G; zo$~G=8p+076G;`}>{MQ>t>7cm=zGtfbdDXm6||jUU|?X?CaE?(<6bKDYKeHlz}DA8 zXT={X=yp_R;HfJ9h%?eWvQ!dRgz&Su*JfNt!Wu>|XfU&68iRikRrHRW|ZxzRR^`eIGt zIeiDgVS>IeExKVRWW8-=A=yA`}`)ZkWBrZD`hpWIxBGkh&f#ijr449~m`j6{4jiJ*C!oVA8ZC?$1RM#K(_b zL9TW)kN*Y4%^-qPpMP7d4)o?Nk#>aoYHT(*g)qmRUb?**F@pnNiy6Fv9rEiUqD(^O zzyS?nBrX63BTRYduaG(0VVG2yJRe%o&rVrLjbxTaAFTd8s;<<@Qs>u(<193R8>}2_ zuwp{7;H2a*X7_jryzriZXMg?bTuegABb^87@SsKkr2)0Gyiax8KQWstw^v#ix45EVrcEhr>!NMhprl$InQMzjSFH54x5k9qHc`@9uKQzvL4ihcq{^B zPrVR=o_ic%Y>6&rMN)hTZsI7I<3&`#(nl+3y3ys9A~&^=4?PL&nd8)`OfG#n zwAMN$1&>K++c{^|7<4P=2y(B{jJsQ0a#U;HTo4ZmWZYvI{+s;Td{Yzem%0*k#)vjpB zia;J&>}ICate44SFYY3vEelqStQWFihx%^vQ@Do(sOy7yR2@WNv7Y9I^yL=nZr3mb zXKV5t@=?-Sk|b{XMhA7ZGB@2hqsx}4xwCW!in#C zI@}scZlr3-NFJ@NFaJlhyfcw{k^vvtGl`N9xSo**rDW4S}i zM9{fMPWo%4wYDG~BZ18BD+}h|GQKc-g^{++3MY>}W_uq7jGHx{mwE9fZiPCoxN$+7 zrODGGJrOkcPQUB(FD5aoS4g~7#6NR^ma7-!>mHuJfY5kTe6PpNNKC9GGRiu^L31uG z$7v`*JknQHsYB!Tm_W{a32TM099djW%5e+j0Ve_ct}IM>XLF1Ap+YvcrLV=|CKo6S zb+9Nl3_YdKP6%Cxy@6TxZ>;4&nTneadr z_ES90ydCev)LV!dN=#(*f}|ZORFdvkYBni^aLbUk>BajeWIOcmHP#8S)*2U~QKI%S zyrLmtPqb&TphJ;>yAxri#;{uyk`JJqODDw%(Z=2`1uc}br^V%>j!gS)D*q*f_-qf8&D;W1dJgQMlaH5er zN2U<%Smb7==vE}dDI8K7cKz!vs^73o9f>2sgiTzWcwY|BMYHH5%Vn7#kiw&eItCqa zIkR2~Q}>X=Ar8W|^Ms41Fm8o6IB2_j60eOeBB1Br!boW7JnoeX6Gs)?7rW0^5psc- zjS16yb>dFn>KPOF;imD}e!enuIniFzv}n$m2#gCCv4jM#ArwlzZ$7@9&XkFxZ4n!V zj3dyiwW4Ki2QG{@i>yuZXQizw_OkZI^-3otXC{!(lUpJF33gI60ak;Uqitp74|B6I zgg{b=Iz}WkhCGj1M=hu4#Aw173YxIVbISaoc z-nLZC*6Tgivd5V`K%GxhBsp@SUU60-rfc$=wb>zdJzXS&-5(NRRodFk;Kxk!S(O(a0e7oY=E( zAyS;Ow?6Q&XA+cnkCb{28_1N8H#?J!*$MmIwLq^*T_9-z^&UE@A(z9oGYtFy6EZef LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/apps/demo-nextjs-antd/src/app/globals.css b/apps/demo-nextjs-antd/src/app/globals.css new file mode 100644 index 00000000..a2dc41ec --- /dev/null +++ b/apps/demo-nextjs-antd/src/app/globals.css @@ -0,0 +1,26 @@ +@import "tailwindcss"; + +:root { + --background: #ffffff; + --foreground: #171717; +} + +@theme inline { + --color-background: var(--background); + --color-foreground: var(--foreground); + --font-sans: var(--font-geist-sans); + --font-mono: var(--font-geist-mono); +} + +@media (prefers-color-scheme: dark) { + :root { + --background: #0a0a0a; + --foreground: #ededed; + } +} + +body { + background: var(--background); + color: var(--foreground); + font-family: Arial, Helvetica, sans-serif; +} diff --git a/apps/demo-nextjs-antd/src/app/layout.tsx b/apps/demo-nextjs-antd/src/app/layout.tsx new file mode 100644 index 00000000..ce9dc724 --- /dev/null +++ b/apps/demo-nextjs-antd/src/app/layout.tsx @@ -0,0 +1,30 @@ +import { Geist, Geist_Mono } from 'next/font/google'; +import type { Metadata } from 'next'; +import './globals.css'; + +const geistSans = Geist({ + variable: '--font-geist-sans', + subsets: ['latin'], +}); + +const geistMono = Geist_Mono({ + variable: '--font-geist-mono', + subsets: ['latin'], +}); + +export const metadata: Metadata = { + title: 'Workflow Demo', + description: 'Workflow Demo Next.js', +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + {children} + + ); +} diff --git a/apps/demo-nextjs-antd/src/app/page.tsx b/apps/demo-nextjs-antd/src/app/page.tsx new file mode 100644 index 00000000..f9fb9a30 --- /dev/null +++ b/apps/demo-nextjs-antd/src/app/page.tsx @@ -0,0 +1,6 @@ +'use client'; +import { EditorClient } from '@editor/index'; + +export default function Home() { + return ; +} diff --git a/apps/demo-nextjs-antd/src/editor/assets/icon-auto-layout.tsx b/apps/demo-nextjs-antd/src/editor/assets/icon-auto-layout.tsx new file mode 100644 index 00000000..6d1b1561 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/assets/icon-auto-layout.tsx @@ -0,0 +1,8 @@ +export const IconAutoLayout = ( + + + +); diff --git a/apps/demo-nextjs-antd/src/editor/assets/icon-comment.tsx b/apps/demo-nextjs-antd/src/editor/assets/icon-comment.tsx new file mode 100644 index 00000000..3eede9e6 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/assets/icon-comment.tsx @@ -0,0 +1,19 @@ +import { CSSProperties, FC } from 'react'; + +interface IconCommentProps { + style?: CSSProperties; +} + +export const IconComment: FC = ({ style }) => ( + + + + +); diff --git a/apps/demo-nextjs-antd/src/editor/assets/icon-condition.svg b/apps/demo-nextjs-antd/src/editor/assets/icon-condition.svg new file mode 100644 index 00000000..be9c2eb4 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/assets/icon-condition.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/demo-nextjs-antd/src/editor/assets/icon-end.jpg b/apps/demo-nextjs-antd/src/editor/assets/icon-end.jpg new file mode 100644 index 0000000000000000000000000000000000000000..46bc47dd344943235af3e58c5c5379cbf0323734 GIT binary patch literal 21016 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 literal 0 HcmV?d00001 diff --git a/apps/demo-nextjs-antd/src/editor/assets/icon-minimap.tsx b/apps/demo-nextjs-antd/src/editor/assets/icon-minimap.tsx new file mode 100644 index 00000000..bd7f93e2 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/assets/icon-minimap.tsx @@ -0,0 +1,19 @@ +export const IconMinimap = () => ( + + + + + + +); diff --git a/apps/demo-nextjs-antd/src/editor/assets/icon-mouse.tsx b/apps/demo-nextjs-antd/src/editor/assets/icon-mouse.tsx new file mode 100644 index 00000000..05bdddd8 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/assets/icon-mouse.tsx @@ -0,0 +1,36 @@ +export function IconMouse(props: { width?: number; height?: number }) { + const { width, height } = props; + return ( + + + + ); +} + +export const IconMouseTool = () => ( + + + +); diff --git a/apps/demo-nextjs-antd/src/editor/assets/icon-pad.tsx b/apps/demo-nextjs-antd/src/editor/assets/icon-pad.tsx new file mode 100644 index 00000000..e0382fde --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/assets/icon-pad.tsx @@ -0,0 +1,51 @@ +export function IconPad(props: { width?: number; height?: number }) { + const { width, height } = props; + return ( + + + + + ); +} + +export const IconPadTool = () => ( + + + + +); diff --git a/apps/demo-nextjs-antd/src/editor/assets/icon-start.jpg b/apps/demo-nextjs-antd/src/editor/assets/icon-start.jpg new file mode 100644 index 0000000000000000000000000000000000000000..72a5a48e60a4b93f4cea42c9e2e45bd9c1a3f01f GIT binary patch literal 20971 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 Q`RC+6A^02G^pDX$0Rx_1qW}N^ literal 0 HcmV?d00001 diff --git a/apps/demo-nextjs-antd/src/editor/assets/icon-switch-line.tsx b/apps/demo-nextjs-antd/src/editor/assets/icon-switch-line.tsx new file mode 100644 index 00000000..d614e84c --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/assets/icon-switch-line.tsx @@ -0,0 +1,10 @@ +export const IconSwitchLine = ( + + + +); diff --git a/apps/demo-nextjs-antd/src/editor/components/base-node/index.tsx b/apps/demo-nextjs-antd/src/editor/components/base-node/index.tsx new file mode 100644 index 00000000..961b6fc8 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/base-node/index.tsx @@ -0,0 +1,27 @@ +import { FlowNodeEntity, useNodeRender } from '@flowgram.ai/free-layout-editor'; + +import { NodeRenderContext } from '@editor/context'; +import { ErrorIcon } from './styles'; +import { NodeWrapper } from './node-wrapper'; + +export const BaseNode = ({ node }: { node: FlowNodeEntity }) => { + /** + * Provides methods related to node rendering + * 提供节点渲染相关的方法 + */ + const nodeRender = useNodeRender(); + /** + * It can only be used when nodeEngine is enabled + * 只有在节点引擎开启时候才能使用表单 + */ + const form = nodeRender.form; + + return ( + + + {form?.state.invalid && } + {form?.render()} + + + ); +}; diff --git a/apps/demo-nextjs-antd/src/editor/components/base-node/node-wrapper.scss b/apps/demo-nextjs-antd/src/editor/components/base-node/node-wrapper.scss new file mode 100644 index 00000000..c609ee57 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/base-node/node-wrapper.scss @@ -0,0 +1,20 @@ +.node-wrapper { + align-items: flex-start; + background-color: #fff; + border: 1px solid rgba(6, 7, 9, 0.15); + border-radius: 8px; + box-shadow: + 0 2px 6px 0 rgba(0, 0, 0, 0.04), + 0 4px 12px 0 rgba(0, 0, 0, 0.02); + display: flex; + flex-direction: column; + justify-content: center; + position: relative; + min-width: 360px; + width: 100%; + height: auto; + + &.selected { + border: 1px solid #4e40e5; + } +} diff --git a/apps/demo-nextjs-antd/src/editor/components/base-node/node-wrapper.tsx b/apps/demo-nextjs-antd/src/editor/components/base-node/node-wrapper.tsx new file mode 100644 index 00000000..459671ce --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/base-node/node-wrapper.tsx @@ -0,0 +1,67 @@ +import React, { useContext, useState } from 'react'; + +import { useClientContext, WorkflowPortRender } from '@flowgram.ai/free-layout-editor'; + +import { SidebarContext } from '@editor/context'; +import { useNodeRenderContext } from '../../hooks'; +import { scrollToView } from './utils'; +import './node-wrapper.scss'; + +// import { NodeWrapperStyle } from "./styles"; + +export interface NodeWrapperProps { + isScrollToView?: boolean; + children: React.ReactNode; +} + +/** + * Used for drag-and-drop/click events and ports rendering of nodes + * 用于节点的拖拽/点击事件和点位渲染 + */ +export const NodeWrapper: React.FC = (props) => { + // IMPORTANT 这里写了如何处理node的数据 + const { children, isScrollToView = false } = props; + const nodeRender = useNodeRenderContext(); + const { selected, startDrag, ports, selectNode, nodeRef, onFocus, onBlur } = nodeRender; + const [isDragging, setIsDragging] = useState(false); + const sidebar = useContext(SidebarContext); + const form = nodeRender.form; + const ctx = useClientContext(); + + const portsRender = ports.map((p) => ); + + return ( + <> +
{ + startDrag(e); + setIsDragging(true); + }} + onClick={(e) => { + selectNode(e); + if (!isDragging) { + sidebar.setNodeId(nodeRender.node.id); + // 可选:将 isScrollToView 设为 true,可以让节点选中后滚动到画布中间 + // Optional: Set isScrollToView to true to scroll the node to the center of the canvas after it is selected. + if (isScrollToView) { + scrollToView(ctx, nodeRender.node); + } + } + }} + onMouseUp={() => setIsDragging(false)} + onFocus={onFocus} + onBlur={onBlur} + data-node-selected={String(selected)} + style={{ + outline: form?.state.invalid ? '1px solid red' : 'none', + }} + > + {children} +
+ {portsRender} + + ); +}; diff --git a/apps/demo-nextjs-antd/src/editor/components/base-node/styles.tsx b/apps/demo-nextjs-antd/src/editor/components/base-node/styles.tsx new file mode 100644 index 00000000..cf2dfada --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/base-node/styles.tsx @@ -0,0 +1,9 @@ +import { ExclamationCircleOutlined } from '@ant-design/icons'; + +export const ErrorIcon = () => ( + +); diff --git a/apps/demo-nextjs-antd/src/editor/components/base-node/utils.ts b/apps/demo-nextjs-antd/src/editor/components/base-node/utils.ts new file mode 100644 index 00000000..3769e91a --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/base-node/utils.ts @@ -0,0 +1,18 @@ +import { FlowNodeEntity, FreeLayoutPluginContext } from '@flowgram.ai/free-layout-editor'; + +export function scrollToView( + ctx: FreeLayoutPluginContext, + node: FlowNodeEntity, + sidebarWidth = 448 +) { + const bounds = node.transform.bounds; + ctx.playground.scrollToView({ + bounds, + scrollDelta: { + x: sidebarWidth / 2, + y: 0, + }, + zoom: 1, + scrollToCenter: true, + }); +} diff --git a/apps/demo-nextjs-antd/src/editor/components/editor-client.tsx b/apps/demo-nextjs-antd/src/editor/components/editor-client.tsx new file mode 100644 index 00000000..90828c12 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/editor-client.tsx @@ -0,0 +1,22 @@ +'use client'; + +import { useEffect, useState } from 'react'; + +import dynamic from 'next/dynamic'; + +const Editor = dynamic(() => import('./editor').then((module) => module.Editor), { ssr: false }); + +export const EditorClient = () => { + const [isMounted, setIsMounted] = useState(false); + + useEffect(() => { + setIsMounted(true); + }, []); + + if (!isMounted) { + // only render in browser client + return null; + } + + return ; +}; diff --git a/apps/demo-nextjs-antd/src/editor/components/editor.tsx b/apps/demo-nextjs-antd/src/editor/components/editor.tsx new file mode 100644 index 00000000..f4ad94af --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/editor.tsx @@ -0,0 +1,23 @@ +'use client'; + +import { EditorRenderer, FreeLayoutEditorProvider } from '@flowgram.ai/free-layout-editor'; + +import { SidebarProvider, SidebarRenderer } from '@editor/components/sidebar'; +import '@flowgram.ai/free-layout-editor/index.css'; +import { useEditorProps } from '../hooks/use-editor-props'; +import { nodeRegistries } from '../data/node-registries'; +import { initialData } from '../data/initial-data'; +import { Tools } from './tools'; + +export const Editor = () => { + const editorProps = useEditorProps(initialData, nodeRegistries); + return ( + + + + + + + + ); +}; diff --git a/apps/demo-nextjs-antd/src/editor/components/form-render.tsx b/apps/demo-nextjs-antd/src/editor/components/form-render.tsx new file mode 100644 index 00000000..60ad493f --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/form-render.tsx @@ -0,0 +1,37 @@ +import { Field } from '@flowgram.ai/free-layout-editor'; + +export const FormRender = () => ( + <> +
+ name="title"> + {({ field }) =>

{field.value}

} + +
+
+ name="input"> + {({ field }) => ( +
+

Input

+ +
+ )} + + name="output"> + {({ field }) => ( +
+

Output

+ +
+ )} + +
+ +); diff --git a/apps/demo-nextjs-antd/src/editor/components/group/color.ts b/apps/demo-nextjs-antd/src/editor/components/group/color.ts new file mode 100644 index 00000000..4a079036 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/group/color.ts @@ -0,0 +1,100 @@ +type GroupColor = { + '50': string; + '300': string; + '400': string; +}; + +export const defaultColor = 'Blue'; + +export const groupColors: Record = { + Red: { + '50': '#fef2f2', + '300': '#fca5a5', + '400': '#f87171', + }, + Orange: { + '50': '#fff7ed', + '300': '#fdba74', + '400': '#fb923c', + }, + Amber: { + '50': '#fffbeb', + '300': '#fcd34d', + '400': '#fbbf24', + }, + Yellow: { + '50': '#fef9c3', + '300': '#fde047', + '400': '#facc15', + }, + Lime: { + '50': '#f7fee7', + '300': '#bef264', + '400': '#a3e635', + }, + Green: { + '50': '#f0fdf4', + '300': '#86efac', + '400': '#4ade80', + }, + Emerald: { + '50': '#ecfdf5', + '300': '#6ee7b7', + '400': '#34d399', + }, + Teal: { + '50': '#f0fdfa', + '300': '#5eead4', + '400': '#2dd4bf', + }, + Cyan: { + '50': '#ecfeff', + '300': '#67e8f9', + '400': '#22d3ee', + }, + Sky: { + '50': '#ecfeff', + '300': '#7dd3fc', + '400': '#38bdf8', + }, + Blue: { + '50': '#eff6ff', + '300': '#93c5fd', + '400': '#60a5fa', + }, + Indigo: { + '50': '#eef2ff', + '300': '#a5b4fc', + '400': '#818cf8', + }, + Violet: { + '50': '#f5f3ff', + '300': '#c4b5fd', + '400': '#a78bfa', + }, + Purple: { + '50': '#faf5ff', + '300': '#d8b4fe', + '400': '#c084fc', + }, + Fuchsia: { + '50': '#fdf4ff', + '300': '#f0abfc', + '400': '#e879f9', + }, + Pink: { + '50': '#fdf2f8', + '300': '#f9a8d4', + '400': '#f472b6', + }, + Rose: { + '50': '#fff1f2', + '300': '#fda4af', + '400': '#fb7185', + }, + Gray: { + '50': '#f9fafb', + '300': '#d1d5db', + '400': '#9ca3af', + }, +}; diff --git a/apps/demo-nextjs-antd/src/editor/components/group/components/background.tsx b/apps/demo-nextjs-antd/src/editor/components/group/components/background.tsx new file mode 100644 index 00000000..dc8f2278 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/group/components/background.tsx @@ -0,0 +1,49 @@ +import { CSSProperties, FC, useEffect } from 'react'; + +import { WorkflowNodeEntity, useWatch } from '@flowgram.ai/free-layout-editor'; + +import { GroupField } from '../constant'; +import { defaultColor, groupColors } from '../color'; + +interface GroupBackgroundProps { + node: WorkflowNodeEntity; + style?: CSSProperties; +} + +export const GroupBackground: FC = ({ node, style }) => { + const colorName = useWatch(GroupField.Color) ?? defaultColor; + const color = groupColors[colorName]; + + useEffect(() => { + const styleElement = document.createElement('style'); + + // 使用独特的选择器 + const styleContent = ` + .workflow-group-render[data-group-id="${node.id}"] .workflow-group-background { + border: 1px solid ${color['300']}; + } + + .workflow-group-render.selected[data-group-id="${node.id}"] .workflow-group-background { + border: 1px solid ${color['400']}; + } + `; + + styleElement.textContent = styleContent; + document.head.appendChild(styleElement); + + return () => { + styleElement.remove(); + }; + }, [color]); + + return ( +
+ ); +}; diff --git a/apps/demo-nextjs-antd/src/editor/components/group/components/color.tsx b/apps/demo-nextjs-antd/src/editor/components/group/components/color.tsx new file mode 100644 index 00000000..d87e63b0 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/group/components/color.tsx @@ -0,0 +1,45 @@ +import { FC } from 'react'; + +import { Popover, Tooltip } from 'antd'; +import { Field } from '@flowgram.ai/free-layout-editor'; + +import { GroupField } from '../constant'; +import { defaultColor, groupColors } from '../color'; + +export const GroupColor: FC = () => ( + name={GroupField.Color}> + {({ field }) => { + const colorName = field.value ?? defaultColor; + return ( + + {Object.entries(groupColors).map(([name, color]) => ( + + field.onChange(name)} + /> + + ))} +
+ } + > + + + ); + }} + +); diff --git a/apps/demo-nextjs-antd/src/editor/components/group/components/header.tsx b/apps/demo-nextjs-antd/src/editor/components/group/components/header.tsx new file mode 100644 index 00000000..d7278ad0 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/group/components/header.tsx @@ -0,0 +1,41 @@ +import type { CSSProperties, FC, MouseEvent, ReactNode } from 'react'; + +import { useWatch } from '@flowgram.ai/free-layout-editor'; + +import { GroupField } from '../constant'; +import { defaultColor, groupColors } from '../color'; + +interface GroupHeaderProps { + onMouseDown: (e: MouseEvent) => void; + onFocus: () => void; + onBlur: () => void; + children: ReactNode; + style?: CSSProperties; +} + +export const GroupHeader: FC = ({ + onMouseDown, + onFocus, + onBlur, + children, + style, +}) => { + const colorName = useWatch(GroupField.Color) ?? defaultColor; + const color = groupColors[colorName]; + return ( +
+ {children} +
+ ); +}; diff --git a/apps/demo-nextjs-antd/src/editor/components/group/components/icon-group.tsx b/apps/demo-nextjs-antd/src/editor/components/group/components/icon-group.tsx new file mode 100644 index 00000000..1a51409f --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/group/components/icon-group.tsx @@ -0,0 +1,47 @@ +import { FC } from 'react'; + +interface IconGroupProps { + size?: number; +} + +export const IconGroup: FC = ({ size }) => ( + + + +); + +export const IconUngroup: FC = ({ size }) => ( + + + +); diff --git a/apps/demo-nextjs-antd/src/editor/components/group/components/index.ts b/apps/demo-nextjs-antd/src/editor/components/group/components/index.ts new file mode 100644 index 00000000..f217671f --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/group/components/index.ts @@ -0,0 +1,2 @@ +export { GroupNodeRender } from './node-render'; +export { IconGroup } from './icon-group'; diff --git a/apps/demo-nextjs-antd/src/editor/components/group/components/node-render.tsx b/apps/demo-nextjs-antd/src/editor/components/group/components/node-render.tsx new file mode 100644 index 00000000..b0775942 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/group/components/node-render.tsx @@ -0,0 +1,75 @@ +import { useEffect } from 'react'; + +import { + FlowNodeFormData, + Form, + FormModelV2, + useNodeRender, +} from '@flowgram.ai/free-layout-editor'; +import { useNodeSize } from '@flowgram.ai/free-container-plugin'; + +import { HEADER_HEIGHT, HEADER_PADDING } from '../constant'; +import { UngroupButton } from './ungroup'; +import { GroupTools } from './tools'; +import { GroupTips } from './tips'; +import { GroupHeader } from './header'; +import { GroupBackground } from './background'; + +export const GroupNodeRender = () => { + const { node, selected, selectNode, nodeRef, startDrag, onFocus, onBlur } = useNodeRender(); + const nodeSize = useNodeSize(); + const formModel = node.getData(FlowNodeFormData).getFormModel(); + const formControl = formModel?.formControl; + + const { height, width } = nodeSize ?? {}; + const nodeHeight = height ?? 0; + + useEffect(() => { + // prevent lines in outside cannot be selected - 防止外层线条不可选中 + const element = node.renderData.node; + element.style.pointerEvents = 'none'; + }, [node]); + + return ( +
{ + selectNode(e); + }} + style={{ + width, + height, + }} + > +
+ <> + { + startDrag(e); + }} + onFocus={onFocus} + onBlur={onBlur} + style={{ + height: HEADER_HEIGHT, + }} + > + + + + + + + +
+ ); +}; diff --git a/apps/demo-nextjs-antd/src/editor/components/group/components/tips/global-store.ts b/apps/demo-nextjs-antd/src/editor/components/group/components/tips/global-store.ts new file mode 100644 index 00000000..b9a18c50 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/group/components/tips/global-store.ts @@ -0,0 +1,33 @@ +/* eslint-disable @typescript-eslint/naming-convention -- no need */ + +const STORAGE_KEY = 'workflow-move-into-group-tip-visible'; +const STORAGE_VALUE = 'false'; + +export class TipsGlobalStore { + private static _instance?: TipsGlobalStore; + + public static get instance(): TipsGlobalStore { + if (!this._instance) { + this._instance = new TipsGlobalStore(); + } + return this._instance; + } + + private closed = false; + + public isClosed(): boolean { + return this.isCloseForever() || this.closed; + } + + public close(): void { + this.closed = true; + } + + public isCloseForever(): boolean { + return localStorage.getItem(STORAGE_KEY) === STORAGE_VALUE; + } + + public closeForever(): void { + localStorage.setItem(STORAGE_KEY, STORAGE_VALUE); + } +} diff --git a/apps/demo-nextjs-antd/src/editor/components/group/components/tips/icon-close.tsx b/apps/demo-nextjs-antd/src/editor/components/group/components/tips/icon-close.tsx new file mode 100644 index 00000000..366a3fbf --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/group/components/tips/icon-close.tsx @@ -0,0 +1,9 @@ +export const IconClose = () => ( + + + +); diff --git a/apps/demo-nextjs-antd/src/editor/components/group/components/tips/index.tsx b/apps/demo-nextjs-antd/src/editor/components/group/components/tips/index.tsx new file mode 100644 index 00000000..9fac353c --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/group/components/tips/index.tsx @@ -0,0 +1,36 @@ +import { useControlTips } from './use-control'; +import { GroupTipsStyle } from './style'; +import { isMacOS } from './is-mac-os'; +import { IconClose } from './icon-close'; + +export const GroupTips = () => { + const { visible, close, closeForever } = useControlTips(); + + if (!visible) { + return null; + } + + return ( + +
+
+

{`Hold ${isMacOS ? 'Cmd ⌘' : 'Ctrl'} to drag node out`}

+
+
+
+

+ Never Remind +

+
+ +
+
+
+ + ); +}; diff --git a/apps/demo-nextjs-antd/src/editor/components/group/components/tips/is-mac-os.ts b/apps/demo-nextjs-antd/src/editor/components/group/components/tips/is-mac-os.ts new file mode 100644 index 00000000..d0bb76ae --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/group/components/tips/is-mac-os.ts @@ -0,0 +1 @@ +export const isMacOS = /(Macintosh|MacIntel|MacPPC|Mac68K|iPad)/.test(navigator.userAgent); diff --git a/apps/demo-nextjs-antd/src/editor/components/group/components/tips/style.ts b/apps/demo-nextjs-antd/src/editor/components/group/components/tips/style.ts new file mode 100644 index 00000000..7e704b5d --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/group/components/tips/style.ts @@ -0,0 +1,74 @@ +import styled from 'styled-components'; + +export const GroupTipsStyle = styled.div` + position: absolute; + top: 35px; + + width: 100%; + height: 28px; + white-space: nowrap; + pointer-events: auto; + + .container { + display: inline-flex; + justify-content: center; + height: 100%; + width: 100%; + background-color: rgb(255 255 255); + border-radius: 8px 8px 0 0; + + .content { + overflow: hidden; + display: inline-flex; + align-items: center; + justify-content: flex-start; + + width: fit-content; + height: 100%; + padding: 0 12px; + + .text { + font-size: 14px; + font-weight: 400; + font-style: normal; + line-height: 20px; + color: rgba(15, 21, 40, 82%); + text-overflow: ellipsis; + margin: 0; + } + + .space { + width: 128px; + } + } + + .actions { + display: flex; + gap: 8px; + align-items: center; + + height: 28px; + padding: 0 12px; + + .close-forever { + cursor: pointer; + + padding: 0 3px; + + font-size: 12px; + font-weight: 400; + font-style: normal; + line-height: 12px; + color: rgba(32, 41, 69, 62%); + margin: 0; + } + + .close { + display: flex; + cursor: pointer; + height: 100%; + align-items: center; + } + } + } +`; diff --git a/apps/demo-nextjs-antd/src/editor/components/group/components/tips/use-control.ts b/apps/demo-nextjs-antd/src/editor/components/group/components/tips/use-control.ts new file mode 100644 index 00000000..947ea2d9 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/group/components/tips/use-control.ts @@ -0,0 +1,66 @@ +import { useCallback, useEffect, useState } from 'react'; + +import { useCurrentEntity, useService } from '@flowgram.ai/free-layout-editor'; +import { + NodeIntoContainerService, + NodeIntoContainerType, +} from '@flowgram.ai/free-container-plugin'; + +import { TipsGlobalStore } from './global-store'; + +export const useControlTips = () => { + const node = useCurrentEntity(); + const [visible, setVisible] = useState(false); + const globalStore = TipsGlobalStore.instance; + + const nodeIntoContainerService = useService(NodeIntoContainerService); + + const show = useCallback(() => { + if (globalStore.isClosed()) { + return; + } + + setVisible(true); + }, [globalStore]); + + const close = useCallback(() => { + globalStore.close(); + setVisible(false); + }, [globalStore]); + + const closeForever = useCallback(() => { + globalStore.closeForever(); + close(); + }, [close, globalStore]); + + useEffect(() => { + // 监听移入 + const inDisposer = nodeIntoContainerService.on((e) => { + if (e.type !== NodeIntoContainerType.In) { + return; + } + if (e.targetContainer === node) { + show(); + } + }); + // 监听移出事件 + const outDisposer = nodeIntoContainerService.on((e) => { + if (e.type !== NodeIntoContainerType.Out) { + return; + } + if (e.sourceContainer === node && !node.blocks.length) { + setVisible(false); + } + }); + return () => { + inDisposer.dispose(); + outDisposer.dispose(); + }; + }, [nodeIntoContainerService, node, show, close, visible]); + + return { + visible, + close, + closeForever, + }; +}; diff --git a/apps/demo-nextjs-antd/src/editor/components/group/components/title.tsx b/apps/demo-nextjs-antd/src/editor/components/group/components/title.tsx new file mode 100644 index 00000000..6371280f --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/group/components/title.tsx @@ -0,0 +1,33 @@ +import { FC, useState } from 'react'; + +import { Input } from 'antd'; +import { Field } from '@flowgram.ai/free-layout-editor'; + +import { GroupField } from '../constant'; + +export const GroupTitle: FC = () => { + const [inputting, setInputting] = useState(false); + return ( + name={GroupField.Title}> + {({ field }) => + inputting ? ( + e.stopPropagation()} + onBlur={() => setInputting(false)} + draggable={false} + onSubmit={() => setInputting(false)} + /> + ) : ( +

setInputting(true)}> + {field.value ?? 'Group'} +

+ ) + } + + ); +}; diff --git a/apps/demo-nextjs-antd/src/editor/components/group/components/tools.tsx b/apps/demo-nextjs-antd/src/editor/components/group/components/tools.tsx new file mode 100644 index 00000000..8d9dc2d1 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/group/components/tools.tsx @@ -0,0 +1,14 @@ +import { FC } from 'react'; + +import { HolderOutlined } from '@ant-design/icons'; + +import { GroupTitle } from './title'; +import { GroupColor } from './color'; + +export const GroupTools: FC = () => ( +
+ + + +
+); diff --git a/apps/demo-nextjs-antd/src/editor/components/group/components/ungroup.tsx b/apps/demo-nextjs-antd/src/editor/components/group/components/ungroup.tsx new file mode 100644 index 00000000..2b43704d --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/group/components/ungroup.tsx @@ -0,0 +1,30 @@ +import { CSSProperties, FC } from 'react'; + +import { Button, Tooltip } from 'antd'; +import { CommandRegistry, WorkflowNodeEntity, useService } from '@flowgram.ai/free-layout-editor'; +import { WorkflowGroupCommand } from '@flowgram.ai/free-group-plugin'; + +import { IconUngroup } from './icon-group'; + +interface UngroupButtonProps { + node: WorkflowNodeEntity; + style?: CSSProperties; +} + +export const UngroupButton: FC = ({ node, style }) => { + const commandRegistry = useService(CommandRegistry); + return ( + +
+
+
+ ); +}; diff --git a/apps/demo-nextjs-antd/src/editor/components/group/constant.ts b/apps/demo-nextjs-antd/src/editor/components/group/constant.ts new file mode 100644 index 00000000..e51a4a07 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/group/constant.ts @@ -0,0 +1,7 @@ +export const HEADER_HEIGHT = 30; +export const HEADER_PADDING = 5; + +export enum GroupField { + Title = 'title', + Color = 'color', +} diff --git a/apps/demo-nextjs-antd/src/editor/components/group/index.css b/apps/demo-nextjs-antd/src/editor/components/group/index.css new file mode 100644 index 00000000..c594c53d --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/group/index.css @@ -0,0 +1,109 @@ +.workflow-group-render { + border-radius: 8px; + pointer-events: none; +} + +.workflow-group-header { + height: 30px; + width: fit-content; + background-color: #fefce8; + border: 1px solid #facc15; + border-radius: 8px; + padding-right: 8px; + pointer-events: auto; +} + +.workflow-group-ungroup { + display: flex; + justify-content: center; + align-items: center; + height: 30px; + width: 30px; + position: absolute; + top: 35px; + right: 0; + border-radius: 8px; + cursor: pointer; + pointer-events: auto; +} + +.workflow-group-ungroup .ant-btn { + color: #9ca3af; +} + +.workflow-group-ungroup:hover .ant-btn { + color: #374151; +} + +.workflow-group-background { + position: absolute; + pointer-events: none; + top: 0; + background-color: #fddf4729; + border: 1px solid #fde047; + border-radius: 8px; + width: 100%; +} + +.workflow-group-render.selected .workflow-group-background { + border: 1px solid #facc15; +} + +.workflow-group-tools { + display: flex; + justify-content: flex-start; + align-items: center; + gap: 4px; + height: 100%; + cursor: move; + color: oklch(44.6% 0.043 257.281); + font-size: 14px; +} +.workflow-group-title { + margin: 0; + max-width: 242px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-weight: 500; +} + +.workflow-group-tools-drag { + height: 100%; + display: flex; + justify-content: center; + align-items: center; + padding-left: 4px; +} + +.workflow-group-color { + width: 16px; + height: 16px; + border-radius: 8px; + background-color: #fde047; + margin-left: 4px; + cursor: pointer; +} + +.workflow-group-title-input { + width: 242px; + border: none; + color: #374151; +} + +.workflow-group-color-palette { + display: grid; + grid-template-columns: repeat(6, 24px); + gap: 12px; + margin: 8px; + padding: 8px; +} + +.workflow-group-color-item { + width: 24px; + height: 24px; + border-radius: 50%; + background-color: #fde047; + cursor: pointer; + border: 3px solid; +} diff --git a/apps/demo-nextjs-antd/src/editor/components/group/index.ts b/apps/demo-nextjs-antd/src/editor/components/group/index.ts new file mode 100644 index 00000000..76a9f010 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/group/index.ts @@ -0,0 +1,4 @@ +import './index.css'; + +export { GroupNodeRender } from './components'; +export { IconGroup } from './components'; diff --git a/apps/demo-nextjs-antd/src/editor/components/index.ts b/apps/demo-nextjs-antd/src/editor/components/index.ts new file mode 100644 index 00000000..62c8ac37 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/index.ts @@ -0,0 +1,5 @@ +export * from './line-add-button'; +export * from './node-panel'; +export * from './node-comment'; +export * from './group'; +export * from './selector-box-popover'; diff --git a/apps/demo-nextjs-antd/src/editor/components/line-add-button/button.tsx b/apps/demo-nextjs-antd/src/editor/components/line-add-button/button.tsx new file mode 100644 index 00000000..6bbe4948 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/line-add-button/button.tsx @@ -0,0 +1,26 @@ +export const IconPlusCircle = () => ( + + + + + + + +); diff --git a/apps/demo-nextjs-antd/src/editor/components/line-add-button/index.scss b/apps/demo-nextjs-antd/src/editor/components/line-add-button/index.scss new file mode 100644 index 00000000..cd48bdb0 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/line-add-button/index.scss @@ -0,0 +1,8 @@ +.line-add-button { + position: absolute; + transform: translate(-50%, -60%); + width: 24px; + height: 24px; + cursor: pointer; + color: inherit; +} diff --git a/apps/demo-nextjs-antd/src/editor/components/line-add-button/index.tsx b/apps/demo-nextjs-antd/src/editor/components/line-add-button/index.tsx new file mode 100644 index 00000000..18c46a44 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/line-add-button/index.tsx @@ -0,0 +1,126 @@ +import { IconPlusCircle } from './button'; +import './index.scss'; +import { useVisible } from './use-visible'; + +import { + HistoryService, + WorkflowDocument, + WorkflowDragService, + WorkflowLinesManager, + WorkflowNodeEntity, + WorkflowNodeJSON, + delay, + useService, +} from '@flowgram.ai/free-layout-editor'; +import { LineRenderProps } from '@flowgram.ai/free-lines-plugin'; +import { + WorkflowNodePanelService, + WorkflowNodePanelUtils, +} from '@flowgram.ai/free-node-panel-plugin'; + +import { useCallback } from 'react'; + +export const LineAddButton = (props: LineRenderProps) => { + const { line, selected, hovered, color } = props; + const visible = useVisible({ line, selected, hovered }); + const nodePanelService = useService(WorkflowNodePanelService); + const document = useService(WorkflowDocument); + const dragService = useService(WorkflowDragService); + const linesManager = useService(WorkflowLinesManager); + const historyService = useService(HistoryService); + + const { fromPort, toPort } = line; + + const onClick = useCallback(async () => { + // calculate the middle point of the line - 计算线条的中点位置 + const position = { + x: (line.position.from.x + line.position.to.x) / 2, + y: (line.position.from.y + line.position.to.y) / 2, + }; + + // get container node for the new node - 获取新节点的容器节点 + const containerNode = WorkflowNodePanelUtils.getContainerNode({ + fromPort, + }); + + // show node selection panel - 显示节点选择面板 + const result = await nodePanelService.singleSelectNodePanel({ + position, + containerNode, + panelProps: { + enableScrollClose: true, + }, + }); + if (!result) { + return; + } + + const { nodeType, nodeJSON } = result; + + // adjust position for the new node - 调整新节点的位置 + const nodePosition = WorkflowNodePanelUtils.adjustNodePosition({ + nodeType, + position, + fromPort, + toPort, + containerNode, + document, + dragService, + }); + + // create new workflow node - 创建新的工作流节点 + const node: WorkflowNodeEntity = document.createWorkflowNodeByType( + nodeType, + nodePosition, + nodeJSON ?? ({} as WorkflowNodeJSON), + containerNode?.id + ); + + // auto offset subsequent nodes - 自动偏移后续节点 + if (fromPort && toPort) { + WorkflowNodePanelUtils.subNodesAutoOffset({ + node, + fromPort, + toPort, + containerNode, + historyService, + dragService, + linesManager, + }); + } + + // wait for node render - 等待节点渲染 + await delay(20); + + // build connection lines - 构建连接线 + WorkflowNodePanelUtils.buildLine({ + fromPort, + node, + toPort, + linesManager, + }); + + // remove original line - 移除原始线条 + line.dispose(); + }, []); + + if (!visible) { + return <>; + } + + return ( +
+ +
+ ); +}; diff --git a/apps/demo-nextjs-antd/src/editor/components/line-add-button/use-visible.ts b/apps/demo-nextjs-antd/src/editor/components/line-add-button/use-visible.ts new file mode 100644 index 00000000..29ade559 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/line-add-button/use-visible.ts @@ -0,0 +1,22 @@ +import './index.scss'; +import { WorkflowLineEntity, usePlayground } from '@flowgram.ai/free-layout-editor'; + +export const useVisible = (params: { + line: WorkflowLineEntity; + selected?: boolean; + hovered?: boolean; +}): boolean => { + const playground = usePlayground(); + const { line, selected = false, hovered } = params; + if (line.disposed) { + // 在 dispose 后,再去获取 line.to | line.from 会导致错误创建端口 + return false; + } + if (playground.config.readonly) { + return false; + } + if (!selected && !hovered) { + return false; + } + return true; +}; diff --git a/apps/demo-nextjs-antd/src/editor/components/node-comment/components/blank-area.tsx b/apps/demo-nextjs-antd/src/editor/components/node-comment/components/blank-area.tsx new file mode 100644 index 00000000..9e24e48a --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/node-comment/components/blank-area.tsx @@ -0,0 +1,43 @@ +import type { FC } from 'react'; + +import { useNodeRender, usePlayground } from '@flowgram.ai/free-layout-editor'; + +import type { CommentEditorModel } from '../model'; +import { DragArea } from './drag-area'; + +interface IBlankArea { + model: CommentEditorModel; +} + +export const BlankArea: FC = (props) => { + const { model } = props; + const playground = usePlayground(); + const { selectNode } = useNodeRender(); + + return ( +
{ + e.preventDefault(); + e.stopPropagation(); + model.setFocus(false); + selectNode(e); + playground.node.focus(); // 防止节点无法被删除 + }} + onClick={(e) => { + model.setFocus(true); + model.selectEnd(); + }} + > + +
+ ); +}; diff --git a/apps/demo-nextjs-antd/src/editor/components/node-comment/components/border-area.tsx b/apps/demo-nextjs-antd/src/editor/components/node-comment/components/border-area.tsx new file mode 100644 index 00000000..b60f3f95 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/node-comment/components/border-area.tsx @@ -0,0 +1,115 @@ +import { type FC } from 'react'; + +import type { CommentEditorModel } from '../model'; +import { ResizeArea } from './resize-area'; +import { DragArea } from './drag-area'; + +interface IBorderArea { + model: CommentEditorModel; + overflow: boolean; + onResize?: () => { + resizing: (delta: { top: number; right: number; bottom: number; left: number }) => void; + resizeEnd: () => void; + }; +} + +export const BorderArea: FC = (props) => { + const { model, overflow, onResize } = props; + + return ( +
+ {/* 左边 */} + + {/* 右边 */} + + {/* 上边 */} + + {/* 下边 */} + + {/** 左上角 */} + ({ top: y, right: 0, bottom: 0, left: x })} + onResize={onResize} + /> + {/** 右上角 */} + ({ top: y, right: x, bottom: 0, left: 0 })} + onResize={onResize} + /> + {/** 右下角 */} + ({ top: 0, right: x, bottom: y, left: 0 })} + onResize={onResize} + /> + {/** 左下角 */} + ({ top: 0, right: 0, bottom: y, left: x })} + onResize={onResize} + /> +
+ ); +}; diff --git a/apps/demo-nextjs-antd/src/editor/components/node-comment/components/container.tsx b/apps/demo-nextjs-antd/src/editor/components/node-comment/components/container.tsx new file mode 100644 index 00000000..91de8631 --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/node-comment/components/container.tsx @@ -0,0 +1,45 @@ +import type { CSSProperties, FC, ReactNode } from 'react'; + +interface ICommentContainer { + focused: boolean; + children?: ReactNode; + style?: React.CSSProperties; +} + +export const CommentContainer: FC = (props) => { + const { focused, children, style } = props; + + const scrollbarStyle = { + // 滚动条样式 + scrollbarWidth: 'thin', + scrollbarColor: 'rgb(159 159 158 / 65%) transparent', + // 针对 WebKit 浏览器(如 Chrome、Safari)的样式 + '&:WebkitScrollbar': { + width: '4px', + }, + '&::WebkitScrollbarTrack': { + background: 'transparent', + }, + '&::WebkitScrollbarThumb': { + backgroundColor: 'rgb(159 159 158 / 65%)', + borderRadius: '20px', + border: '2px solid transparent', + }, + } as unknown as CSSProperties; + + return ( +
+ {children} +
+ ); +}; diff --git a/apps/demo-nextjs-antd/src/editor/components/node-comment/components/content-drag-area.tsx b/apps/demo-nextjs-antd/src/editor/components/node-comment/components/content-drag-area.tsx new file mode 100644 index 00000000..b129207b --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/node-comment/components/content-drag-area.tsx @@ -0,0 +1,89 @@ +import { type FC, type WheelEventHandler, useEffect, useState } from 'react'; + +import { useNodeRender, usePlayground } from '@flowgram.ai/free-layout-editor'; + +import type { CommentEditorModel } from '../model'; +import { DragArea } from './drag-area'; + +interface IContentDragArea { + model: CommentEditorModel; + focused: boolean; + overflow: boolean; +} + +export const ContentDragArea: FC = (props) => { + const { model, focused, overflow } = props; + const playground = usePlayground(); + const { selectNode } = useNodeRender(); + + const [active, setActive] = useState(false); + + useEffect(() => { + // 当编辑器失去焦点时,取消激活状态 + if (!focused) { + setActive(false); + } + }, [focused]); + + const handleWheel: WheelEventHandler = (e) => { + const editorElement = model.element; + if (active || !overflow || !editorElement) { + return; + } + e.stopPropagation(); + const maxScroll = editorElement.scrollHeight - editorElement.clientHeight; + const newScrollTop = Math.min(Math.max(editorElement.scrollTop + e.deltaY, 0), maxScroll); + editorElement.scroll(0, newScrollTop); + }; + + const handleMouseDown = (mouseDownEvent: React.MouseEvent) => { + if (active) { + return; + } + mouseDownEvent.preventDefault(); + mouseDownEvent.stopPropagation(); + model.setFocus(false); + selectNode(mouseDownEvent); + playground.node.focus(); // 防止节点无法被删除 + + const startX = mouseDownEvent.clientX; + const startY = mouseDownEvent.clientY; + + const handleMouseUp = (mouseMoveEvent: MouseEvent) => { + const deltaX = mouseMoveEvent.clientX - startX; + const deltaY = mouseMoveEvent.clientY - startY; + // 判断是拖拽还是点击 + const delta = 5; + if (Math.abs(deltaX) < delta && Math.abs(deltaY) < delta) { + // 点击后隐藏 + setActive(true); + } + document.removeEventListener('mouseup', handleMouseUp); + document.removeEventListener('click', handleMouseUp); + }; + + document.addEventListener('mouseup', handleMouseUp); + document.addEventListener('click', handleMouseUp); + }; + + return ( +
+ +
+ ); +}; diff --git a/apps/demo-nextjs-antd/src/editor/components/node-comment/components/drag-area.tsx b/apps/demo-nextjs-antd/src/editor/components/node-comment/components/drag-area.tsx new file mode 100644 index 00000000..316e7b7b --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/node-comment/components/drag-area.tsx @@ -0,0 +1,40 @@ +import { CSSProperties, type FC } from 'react'; + +import { useNodeRender, usePlayground } from '@flowgram.ai/free-layout-editor'; + +import { type CommentEditorModel } from '../model'; + +interface IDragArea { + model: CommentEditorModel; + stopEvent?: boolean; + style?: CSSProperties; +} + +export const DragArea: FC = (props) => { + const { model, stopEvent = true, style } = props; + + const playground = usePlayground(); + + const { startDrag: onStartDrag, onFocus, onBlur, selectNode } = useNodeRender(); + + return ( +
{ + if (stopEvent) { + e.preventDefault(); + e.stopPropagation(); + } + model.setFocus(false); + onStartDrag(e); + selectNode(e); + playground.node.focus(); // 防止节点无法被删除 + }} + onFocus={onFocus} + onBlur={onBlur} + /> + ); +}; diff --git a/apps/demo-nextjs-antd/src/editor/components/node-comment/components/editor.tsx b/apps/demo-nextjs-antd/src/editor/components/node-comment/components/editor.tsx new file mode 100644 index 00000000..1f0749de --- /dev/null +++ b/apps/demo-nextjs-antd/src/editor/components/node-comment/components/editor.tsx @@ -0,0 +1,60 @@ +import { type CSSProperties, type FC, useEffect, useRef } from 'react'; + +import { usePlayground } from '@flowgram.ai/free-layout-editor'; + +import { CommentEditorModel } from '../model'; +import { CommentEditorEvent } from '../constant'; + +interface ICommentEditor { + model: CommentEditorModel; + style?: CSSProperties; + value?: string; + onChange?: (value: string) => void; +} + +export const CommentEditor: FC = (props) => { + const { model, style, onChange } = props; + const playground = usePlayground(); + const editorRef = useRef(null); + const placeholder = model.value || model.focused ? undefined : 'Enter a comment...'; + + // 同步编辑器内部值变化 + useEffect(() => { + const disposer = model.on((params) => { + if (params.type !== CommentEditorEvent.Change) { + return; + } + onChange?.(model.value); + }); + return () => disposer.dispose(); + }, [model, onChange]); + + useEffect(() => { + if (!editorRef.current) { + return; + } + model.element = editorRef.current; + }, [editorRef]); + + return ( +
+

{placeholder}

+